7、门面模式
1、他对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得使用起来更加方便
2、实现了子系统与客户之间的松耦合关系
3、如果应用需要,他并不限制他们使用子系统类,异常可以在系统易用性之间加以选择
适用场景
1、为一些负责的子系统提供一组接口
2、提高子系统的独立性
3、在层次化结构中,可以使用门面模式定义系统的每一层的接口
8、DI依赖注入 其实就是参数传递
减少类和类之间联系
门面模式:
<?php
//门面模式实例打开照相机为例
//两部打开闪光灯打开照相机,关闭闪光灯关闭照相机
class Light{
function turnOn(){
echo '打开闪光灯<br/>';
}
function turnOff(){
echo '关闭闪光灯<br/>';
}
}
class Camera{
function active(){
echo '打开照相机<br/>';
}
function deactive(){
echo '关闭照相机';
}
}
class Facade{
protected $light;
protected $camera;
function __construct(){
$this->light=new Light();
$this->camera=new Camera();
}
function start(){
$this->light->turnOn();
$this->camera->active();
}
function stop(){
$this->light->turnOff();
$this->light->deactive();
}
}
/*
$light=new Light();
$camera=new Camera();
$light->turnOn();
$camera->active();*/
$f=new Facade();
$f->start();
$f->stop();
?>
DI注入、容器
<?php
//轮胎类和汽车类
/*class LunTai{
function roll(){
echo '轮胎在滚动';
}
}
class BMW{
function run(){
$luntai=new LunTai();
$luntai->roll();
echo '开着宝马<br/>';
}
}
$bmw=new BMW();
$bmw->run();
class LunTai{
function roll(){
echo '轮胎在滚动';
}
}
class BMW{
protected $luntai;
function __construct($luntai){
$this->luntai=$luntai;
}
function run(){
//$luntai=new LunTai();
$this->luntai->roll();
echo '开着宝马<br/>';
}
}
$luntai=new LunTai();
$bmw=new BMW();
$bmw->run();*/
class LunTai{
function roll(){
echo '轮胎在滚动';
}
}
class BMW{
protected $luntai;
function __construct($luntai){
$this->luntai=$luntai;
}
function run(){
//$luntai=new LunTai();
$this->luntai->roll();
echo '开着宝马<br/>';
}
}
class Container{
//存放绑定类s
static $register=[];
//绑定函数
static function bind($name,Closure $col){
self::$register[$name]=$col;//闭包
}
//创建函数创建对象
static function make($name){
$col=self::$register[$name];
return $col();
}
}
Container::bind('luntai',function(){
return new LunTai();
});
Container::bind('bmw',function(){
return new BMW(Container::make('luntai'));
});
$bmw=Container::make('bmw');
$bmw->run();
?>