php门面facade提示,php中的门面模式Facade

参考:https://www.phpmianshi.com/?id=70

概念

门面模式又叫外观模式,用来隐藏系统的复杂性,提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

构成

1.定义一个(或多个)具备所需接口的新类(门面类Facade)

2.新类门户(门面类Facade)使用原来的系统(包含Hotel,Traffic,ScenicArea三个类)

3.客户使用门面类对象与原系统打交道(客户端只调用Facade)

示例

我们出去旅行,对于同样的路线,跟团和自费有什么区别。

跟团的好处是省心,缴费以后路线,车,门票都不用再操心了。

自费的好处是今天累了我可以休息,觉得那个景点不错,我可以临时更改行程。

//子系统类共3个

class ScenicArea

{

public function Ticket1()

{

echo "景区1门票
";

}

public function Ticket2()

{

echo "景区2门票
";

}

public function Ticket3()

{

echo "景区3门票
";

}

}

class Traffic

{

public function __construct(){}

public function buyBusTicket($from, $to)

{

echo "买入从".$from."到".$to."的汽车票
";

}

public function buyTrainTicket($from, $to)

{

echo "买入从".$from."到".$to."的火车票
";

}

}

class Hotel

{

public function __construct(){}

public function hotel($place)

{

echo "订下".$place."的旅店
";

}

}

//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 '===========
';

$two = $agency->twoDay();

总结

其实门面模式我们在不知不觉中用的挺多的,大一些的项目,和其他人对接,第一个层api接口,只接收数据,调用第二层的方法,第二层,就是门面模式了,第三层是各种功能类。门面模式促使我们把底层代码写的很细致,而不是一坨。这样在日后查找功能的时候,前2层的代码逻辑都是很清晰的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值