当前位置:首页 > 设计模式 > 正文内容

php中的门面模式Facade

phpmianshi9年前 (2012-04-17)设计模式199

概念

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


构成

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层的代码逻辑都是很清晰的。

版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

php中的建造型模式

概念也叫生成器模式,建造型模式用于创建过程稳定,但配置多变的对象。在《设计模式》一书中的定义是:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。建造者模式主要用来通过链式调用生成...

Laravel神奇的IoC容器

Laravel 的核心就是一个 IoC 容器,根据文档,称其为“服务容器”通过举例来让读者去理解什么是 IoC(控制反转) 和 DI(依赖注入)超人和超能力,依...

代理模式、桥接模式、中介者模式区别和联系

联系    在现实生活中,如房屋中介、买房人、卖房人,房屋中介是一个中介,因为它担任买房人和卖房人之间的相同;房屋中介也是一个代理,它在卖房人眼前是买房人的代理,在卖房人...

php中的组合模式

概念当我们的一个对象可能代表一个单一的实体,或者一个组合的实体,但是仍然需要通过同样的方式被使用时,这种情形则适合使用组合模式的设计。示例一个表单类实例在处理其表单所有元素的方法与处理该表单自身实例方...

php中介者模式

概念中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改。一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式。PHP中...

php中装饰器模式

概念装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。