浅谈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();

本文名称:浅谈PHP设计模式的门面模式
网站路径:http://scyanting.com/article/dsoiphh.html