概念
门面模式又叫外观模式,用来隐藏系统的复杂性,提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
构成
1.定义一个(或多个)具备所需接口的新类(门面类Facade)
2.新类门户(门面类Facade)使用原来的系统(包含Hotel,Traffic,ScenicArea三个类)
3.客户使用门面类对象与原系统打交道(客户端只调用Facade)
示例
我们出去旅行,对于同样的路线,跟团和自费有什么区别。
跟团的好处是省心,缴费以后路线,车,门票都不用再操心了。
自费的好处是今天累了我可以休息,觉得那个景点不错,我可以临时更改行程。
<?php //子系统类共3个 class ScenicArea { public function Ticket1() { echo "景区1门票<br/>"; } public function Ticket2() { echo "景区2门票<br/>"; } public function Ticket3() { echo "景区3门票<br/>"; } } class Traffic { public function __construct(){} public function buyBusTicket($from, $to) { echo "买入从".$from."到".$to."的汽车票<br/>"; } public function buyTrainTicket($from, $to) { echo "买入从".$from."到".$to."的火车票<br/>"; } } class Hotel { public function __construct(){} public function hotel($place) { echo "订下".$place."的旅店<br/>"; } } //Facade 类 class Facade { private $traffic; private $scenicArea; private $hotel; public function __construct() { $this->hotel = new Hotel(); $this->traffic = new Traffic(); $this->scenicArea = new ScenicArea(); } public function oneDay() { $this->traffic->buyBusTicket('A','B'); $this->scenicArea->Ticket1(); $this->traffic->buyBusTicket('B','A'); } public function twoDay() { $this->traffic->buyTrainTicket('A','B'); $this->scenicArea->Ticket1(); $this->traffic->buyBusTicket('B','C'); $this->hotel->hotel('C'); $this->scenicArea->Ticket2(); $this->traffic->buyTrainTicket('C','A'); } } //客户端调用 $agency = new Facade(); $one = $agency->oneDay(); echo '===========<br/>'; $two = $agency->twoDay();
总结
其实门面模式我们在不知不觉中用的挺多的,大一些的项目,和其他人对接,第一个层api接口,只接收数据,调用第二层的方法,第二层,就是门面模式了,第三层是各种功能类。门面模式促使我们把底层代码写的很细致,而不是一坨。这样在日后查找功能的时候,前2层的代码逻辑都是很清晰的。
- 本文固定链接: https://www.phpmianshi.com/?id=70
- 转载请注明: admin 于 PHP面试网 发表
《本文》有 0 条评论