实例
<?php /** * 容器:也叫服务容器 * 基本思想:拿来就用,最大限度简化外部对象调用,类似于:即插即用 * 基本实现分三步: * 1.创建容器:本质就是将一个类与它的实现绑定到一个关联数组; * 2.服务注册:初始化这个关联数组,将工具类绑定到容器中 * 3.容器依赖:也叫依赖容器,调用的时候直接传一个容器对象即可,不用再一个一个的传具体对象 */ //数据库操作类 class Db { public function connect() { return '连接数据库成功'; } } //数据验证类 class Validate { public function check() { return '数据验证通过'; } } //视图类 class View { public function display() { return '用户登录成功'; } } /**********************************************************/ //一、创建容器类 class Container { //创建一个空数组用来保存工具类以及实现方法 protected $instance =[]; //将需要实例化的类与它的实现方法进行绑定,将对像容器初始化 public function bind($abstract,Closure $process) { $this->instance[$abstract] = $process; } //创建特定类的实例 public function make($abstract,$params=[]) { return call_user_func_array($this->instance[$abstract],[]); } } /***************************************************************/ // 二、服务注册:其实就是调用容器的bind()将对象注册到容器中 $container = new Container(); //将Db类绑定到容器中 bind方法结合 两个参数等于 $container->bind('db',function(){ return new Db(); }); $container->bind('validate',function(){ return new Validate(); }); $container->bind('view',function(){ return new View(); }); // var_dump($container->instance);die();//测试 //三、容器注入:容器依赖,以所有用到的对象,以容器的方式注入到当前的工作类中 //用户类:也是工作类 class User { public function login(Container $container) { // $container->make('db'):实例化Db类创建$db对象 echo $container->make('db')->connect(),'<br>'; echo $container->make('validate')->check(),'<br>'; echo $container->make('view')->display(); } } $user = new User(); echo '<h3>用依赖容器来解耦</h3>'; echo $user->login($container);
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<?php /** * facade: 门面模式,也叫外观模式 * 就是将一些操作进行封装,对外提供一个统一的接口 * facade模式与容器依赖是黄金搭档 */ require 'container.php';//导入容器 /** * Facade 类实现三个功能 * 1.数据库的连接 * 2.数据验证 * 3.输出提示 * 对于调用着来说,他不需要事先知道这三个操作在哪个具体的类中,只需要调用Facade就可以执行以上三个操作 */ class Facade { //1.连接数据库 public static function connect(Container $container) { return $container->make('db')->connect(); } // 2.数据验证 public static function check(Container $container) { return $container->make('validate')->check(); } // 3.输出提示 public static function display(Container $container) { return $container->make('view')->display(); } } //客户端调用 echo '<h3>使用外观模式Facade门面统一调用</h3>'; echo Facade::connect($container); echo Facade::check($container); echo Facade::display($container);
运行实例 »
点击 "运行实例" 按钮查看在线实例