美文网首页php
2019-04-01php设计模式----门面模式(facade

2019-04-01php设计模式----门面模式(facade

作者: cuiyao50 | 来源:发表于2019-04-01 09:43 被阅读1次

    门面模式(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();

     如果是自费,很显然你会在客户端调用的时候,new完上面的3个子系统类,然后自己组装。这里我就不再写了。

    二、定义

    提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。

    构成

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

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

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

    三、一些看法

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

    php不用打包,其实修改很方便的,个人感觉构不成缺点,尤其在结构清晰面前,就算是个缺点可以忽略。

    ---------------------

    作者:风-四方

    来源:CSDN

    原文:https://blog.csdn.net/wwx890208/article/details/82284330

    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关文章

      网友评论

        本文标题:2019-04-01php设计模式----门面模式(facade

        本文链接:https://www.haomeiwen.com/subject/dpjmbqtx.html