外观模式facade主要实现代码接口统一调用

原创 2019-04-19 18:08:08 171
摘要:<?php /**  * Created by PhpStorm.  * User: Administrator  * Date: 2019/4/19  * Time: 16:44  * 容器:服务容器(IOC)  * 实现
<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/4/19
 * Time: 16:44
 * 容器:服务容器(IOC)
 * 实现分三步
 * 1.创建容器:将一个类与他的实现绑定到一个关联数组
 * 2.服务注册:初始化这个关联数组,将工作类绑定到容器中
 * 3.容器依赖:也叫依赖容器,调用时直接传一个容器对象
 *
 */

//数据库操作类
class Db
{
    //数据库连接
    public function connect()
    {
        return '数据库连接成功<br>';
    }
}

//数据验证类
class Validate
{
    //数据验证
    public function check()
    {
        return '数据库验证成功<br>';
    }
}


//视图类
class View
{
    //内容输出
    public function display()
    {
        return '用户登录成功<br>';
    }
}

//以上为工具类
/**************************************/
//1.创建容器类
class Container
{
    //创建一个空数组用来保存工具类及实现方法
    protected $instance =[];  //私有属性无法查看
//    public $instance =[];

//    $instance['类名'] ='类的实例化过程是一个函数';
//将需要实例化的类与他的实现方法进行绑定:将对象容器初始化
    public function bind($abstract,Closure $process)
    {
        $this->instance[$abstract] = $process;
//        $this->instance['db'] = function (){
//            return new Db('127.0.0.1','root','root');
//        }

    }

    //创建特定类的实例
    public function make($abstract,$params=[])
    {
        return call_user_func_array($this->instance[$abstract],[]);
    }
}
/**************************************/
//2.服务注册:调用容器的bind()将对象注册到容器中  实例就是对象
$container = new Container();

//将Db类绑定到容器中
$container->bind('db',function (){
    return new Db();
});


//将Validate类绑定到容器中
$container->bind('validate',function (){
    return new Validate();
});

//将View类绑定到容器中
$container->bind('view',function (){
    return new View();
});

简化Facade:在外观模式facade中,创建一个初始化方法事先注入容器

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/4/19
 * Time: 17:50
 */
require 'container.php';

class Facade
{
    //创建静态属性,保存容器对象
    protected static $container =null;

    //创建初始化方法,给容器对象赋值
    public static function initialize(Container $container)
    {
        static::$container = $container;
    }

    //1.连接数据库
    public static function connect()
    {
        return static::$container->make('db')->connect();
    }
    //2.数据验证
    public static function check()
    {
        return static::$container->make('validate')->check();
    }
    //3.输出提示
    public static function display()
    {
        return static::$container->make('view')->display();
    }
}

//客户端调用
echo '门面模式简化调用方式:<br>';
Facade::initialize($container);
echo Facade::connect();
echo Facade::check();
echo Facade::display();

    外观模式facade主要解决类的耦合,实现代码接口统一方便调用。

批改老师:西门大官人批改时间:2019-04-20 13:15:59
老师总结:这是拷贝老师的课件吧?最好自己写,这样理解才深刻!

发布手记

热门词条