>백엔드 개발 >PHP 튜토리얼 >PHP设计模式--门面模式

PHP设计模式--门面模式

WBOY
WBOY원래의
2016-06-23 13:34:36836검색

声明:本系列博客参考资料《大话设计模式》,作者程杰。

        门面模式(有时候也称外观模式)是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。

       

         案例:炒股票,新股民不了解证券知识做股票,是很容易亏钱的,需要学习的知识太多了,这样新手最好把炒股的事情委托给基金公司,基金公司了解证券知识,那么新股民把自己的股票托管给基金公司去运营,这样新股民不必了解哪只股票的走势就可以完成股票的买卖。基金公司在这里就是一个门面,针对于新股民的门面。


        UML类图:

       角色分析:   

       门面(FacadeCompany)角色:此角色封装一个高层接口,将客户端的请求代理给适当的子系统对象,是门面模式的核心接口。

       子系统(ICBC)角色:实现子系统的具体功能,处理FacadeCompany对象指派的任务。子系统没有FacadeCompany的任何信息,没有对FacadeCompany对象的引用。


        具体代码案例:

       

<?php /** * Created by PhpStorm. * User: LYL * Date: 2015/5/16 * Time: 11:07 *//**阿里股票 * Class Ali */class Ali{    function buy()    {        echo "买入阿里股票<br/>";    }    function sell()    {        echo "卖出阿里股票<br>";    }}/**万达股票 * Class Wanda */class Wanda{    function buy()    {        echo "买入万达股票<br>";    }    function sell()    {        echo "卖出万达股票<br>";    }}/**京东股票 * Class Jingdong */class Jingdong{    function buy()    {        echo "买入京东股票<br>";    }    function sell()    {        echo "卖出京东股票<br>";    }}/**门面模式核心角色 * Class FacadeCompany */class FacadeCompany{    private $ali;    private $wanda;    private $jingdong;    function __construct()    {        $this->ali=new Ali();        $this->jingdong=new Jingdong();        $this->wanda=new Wanda();    }    function buy()    {        $this->wanda->buy();        $this->ali->buy();    }    function sell()    {        $this->jingdong->sell();    }}

         客户端调用代码:

        

header("Content-Type:text/html;charset=utf-8");//------------------------门面模式测试代码------------------require_once "./Facade/Facade.php";$lurenA=new FacadeCompany();$lurenA->buy();$lurenA->sell();

         优势:

         1) 它可以 对客户屏蔽子系统组件 ,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。

         2) 它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。 Facade模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。

         3) Facade模式可以消除复杂的循环依赖关系。这一点在客户程序与子系统是分别实现的时候尤为重要。在大型软件系统中降低编译依赖性至关重要。在子系统类改变时,希望尽量减少重编译工作以节省时间。用Facade可以降低编译依赖性,限制重要系统中较小的变化所需的重编译工作。

         4)Facade模式同样也有利于简化系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。


PHP面向对象设计模式

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.