软件信息网 移动端开发 PHP:门面模式

PHP:门面模式

简介:

门面模式又称之为外观模式,属于结构型的设计模式。
用于为子系统中的一组接口提供一致的调用方案。门面模式定义了一个高层接口,引入门面角色之后,只需要直接与门面角色交互,降低了系统的耦合度。

适用场景:

  1. 最经典的Laravel的Facade,当使用一些库的时候,不需要了解底层系统如何实现,只需要知道如何使用门面调用即可。
  2. 为一些复杂的子系统提供一个简单对外开放的调用方案。

优点:

  1. 对客户端,屏蔽了子系统的实现逻辑,只留出可供使用的方法,让开发人员很方便的看出来子系统可供调用的功能。
  2. 实现了子系统与调用端的松耦合关系。
  3. 扩展性很强,子类系统不受限制。

缺点:

隔绝了子系统的具体实现代码,增加代码溯源的难度。

代码:

//注:这里的门面写法和Laravel中的不一样,Laravel的门面是基于门面模式提供了一套强大且优雅的模块子系统解决方案,而此处的门面只是一种实现门面思想的示例。
class Facade {
    private $pc;
    private $mobile;
    public function __construct(Mobile $mobile, PC $pc) {
        $this->mobile = $mobile;
        $this->pc     = $pc;
    }

    public function turnOn() {
        $this->mobile->turnOn();
        $this->pc->turnOn();
    }


    public function turnOff() {
        $this->pc->turnOff();
        $this->mobile->turnOff();
    }
}


//子系统接口
interface PC {
    public function turnOn();
    public function turnOff();
}


//子系统接口
interface  Mobile {
    public function turnOn();
    public function turnOff();
}


//子系统实现
class ASUS implements PC {
    public function turnOn() {
        echo '华硕电脑开机' . PHP_EOL;
    }

    public function turnOff() {
        echo '华硕电脑关机' . PHP_EOL;
    }
}


//子系统实现
class Vivo implements Mobile {
    public function turnOn() {
        echo 'Vivo手机开机' . PHP_EOL;
    }

    public function turnOff() {
        echo 'Vivo手机关机' . PHP_EOL;
    }
}


//调用端==========================================
$facade = new Facade(new Vivo(), new ASUS());
$facade->turnOn();
$facade->turnOff();
本文来自网络,不代表软件信息网立场,转载请注明出处。软件定制开发交流:15528175269(微信同号)https://www.saasyo.com/xz/15313.html

作者: 王鹏程序员

上一篇
下一篇
联系我们

联系我们

15889726201

在线咨询: QQ交谈

邮箱: 187395037@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部