PHP设计模式——门面模式

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

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

       

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

        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面向对象设计模式

时间: 2024-10-07 12:11:30

PHP设计模式——门面模式的相关文章

8、Python与设计模式--门面模式

一.火警报警器(1) 假设有一组火警报警系统,由三个子元件构成:一个警报器,一个喷水器,一个自动拨打电话的装置.其抽象如下: class AlarmSensor: def run(self): print "Alarm Ring..." class WaterSprinker: def run(self): print "Spray Water..." class EmergencyDialer: def run(self): print "Dial 11

经典设计模式——门面模式

   随着系统的不断改进和开发的深入,它们会变得越来越复杂,系统会生成大量的类,这使得程序更难被理解.门面模式可谓这些类提供一个简化的接口,从而简化访问这些类的复杂性,有时候这种简化可能降低访问这些底层累的灵活性,但除了要求特别苛刻的客户端之外(即调用方法的类),它通常都可以提供所需的全部功能.当然,那些苛刻的客户端仍然可以直接访问底层的类和方法.     门面(Facade)模式也被称为正面模式.外观模式,这种模式用于将一组复杂的类包装到一个简单的外部接口中.     现在考虑这样的场景:我们

设计模式之禅之设计模式-门面模式

一:门面模式的定义        --->门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式        --->要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式提供一个高层次的接口,使得子系统更易于使用.        --->门面模式注重"统一的对象",也就是提供一个访问子系统的接口,除了这个接口不允许有任何访问子系统的行为发生        --->这正是我们设计所需要的模式,不改变子系统对外暴露的接口

学习php设计模式 php实现门面模式(Facade)_php技巧

一.意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层次的接口,使得子系统更加容易使用[GOF95] 外部与子系统的通信是通过一个门面(Facade)对象进行.二.门面模式结构图 三.门面模式中主要角色门面(Facade)角色: 此角色将被客户端调用 知道哪些子系统负责处理请求 将用户的请求指派给适当的子系统 子系统(subsystem)角色: 实现子系统的功能 处理由Facade对象指派的任务 没有Facade的相关信息,可以被客户端直接调用 可以同时有一个或多个子系

Java设计模式详解之门面模式(外观模式)_java

门面模式(Facade Pattern)也叫外观模式,它隐藏系统的复杂性,并向客户端提供一个可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性,为子系统中的一组接口提供了一个统一的高层访问接口,这个接口使得子系统更容易被访问或使用.这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用. 简而言之,就是把一堆复杂的流程封装成一个接口供给用户更简单的使用,这个设计模式里有三个角色: 1)门面角色( facade ):

Java设计模式之门面模式使用详解

门面模式有三个角色组成: 1)门面角色( facade ):这是门面模式的核心.它被客户角色调用,因此它熟悉子系统的功能.它内部根据客户角色已有的需求预定了几种功能组合. 2) 子系统角色:实现了子系统的功能.对它而言, façade 角色就和客户角色一样是未知的,它没有任何 façade 角色的信息和链接. 3)客户角色:调用 façade 角色来完成要得到的功能  模式作用: 将一些复杂的操作封装起来,以一个简单的接口提供给客户端. 可以定义多个子系统, 层次之间的粗细粒度需要把握好.一个子

解读设计模式----外观模式(Facade Pattern)

一.模式简介 外观模式(Facade Pattern)可以将一系列复杂的类包装成一个简单的封闭接口.也称门面模式. 二.模式意图 每一种设计模式都有它的意图,我们看看设计模式的祖师们是怎么说的.按照GOF的说法,Facade模式的意图是:为了子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 三.模式UML(下图转自http://www.dofactory.com/) 四.模式参与者 门面(Facade)角色:客户端可以调用这个角色的方

门面模式的典型应用 Socket 和 Http(post,get)、TCP/IP 协议的关系总结

门面模式的一个典型应用:Socket 套接字(Socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息: 连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口. 在设计模式中,Socket其实就是一个⻔面模式,它把复杂的TCP/IP协议族隐藏在Socket接⼝后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议.它是应用层与TCP/IP协议

适配器模式之门面模式

设计模式目录 http://blog.csdn.net/fenglailea/article/details/52733435 风.fox 门面模式 要求一个子系统的外部与其内部的同学必须通过一个统一的对象进行. 门面模式提供一个高层次的接口,使得子系统更易于使用 通用类图 组成 门面角色 客户端可以调用这个角色的方法 子系统角色 可以同时有一个或多个子系统.每一个子系统都不是一个单独的类,而是一个类的集合.子系统不知道门面的存在.对于子系统而言,门面仅仅是另外一个客户端而已 通用源码 JAVA