1 意图:为子系统中的一组接口提供一个一直的界面,Facade模式定义了一个高层接口。这个接口使得这一子系统更加容易使用,

2 动机,便于不需要更多功能的人通过Facade 简化使用

3 适用性:

. 为复杂子系统提供一个简单接口。

. 客户程序与抽象类的实现部分之间存在着很大的依赖性。Facade提高子系统的独立性

. 当你需要构建一个层次结构的子系统时,可以仅通过facade通讯,简化之间的依赖性

4 参与者:

. Facade:知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象

. Subsystem classes:实现子系统的功能。处理由Facade对象指派的任务。没有Facade的任何信息,没有指向Facade的指针

5 协作:

. 客户通过发送请求给Facade的方式与子系统通讯。

. 使用Facade的客户不需要直接使用子系统

6 效果:

. 对客户屏蔽子系统组件

. 实现子系统与客户之间的松耦合关系

. 如果必要,客户可以直接使用子系统

7 实现:

1)降低客户-子系统间的耦合度:用抽象类实现Facade而它的具体子类对应于不同的子类系统实现,降低客户与子系统的耦合度

2)公共子系统与私有子系统

子系统的公共接口包含所有的客户程序可以访问的类;私有接口仅用于对子系统进行扩充。

8 相关模式:

. Abstract Factory 与Facade一起使用以提供一个接口,这一接口可用来以一种子系统独立的方式创建子系统对象。

. Meidiator与Facade有点像,抽象了一些已有的功能。Mediator是使得同事间的任何通讯进行抽象,通常集中不属于任何单个对象的功能。

Mediator的同事知道中介者并与它通信,而不是直接与其他同事通信。Facade仅对子系统对象的接口抽象,更易于使用,不定义新功能,子系统也不知道Facade的存在

. 只需要一个Facade时,使用singleton

FACADE的更多相关文章

  1. 设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)

    在此先容我拿“小弟”这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”.在上面一篇博文我们完整的介绍了“适配器模式”,接下来我们将要在这篇博客 ...

  2. 设计模式(十一)外观模式(Facade Pattern)

    一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ...

  3. 每天一个设计模式-2 外观模式(Facade)

    每天一个设计模式-2  外观模式(Facade) 1.生活中的示例 客户想要购买一台电脑,一般有两种方法: 1.自己DIY,客户需要知道组成电脑的所有电子器件,并且需要熟悉那些配件,对客户要求较高. ...

  4. C#设计模式系列:外观模式(Facade)

    外观模式主要解决的问题是:当我们有多个类要处理时,往往要一个类一个类地区调用,没有复用性和扩展性.外观模式通过定义一个界面,把处理子类的过程封装成操作,主要就把用户从复杂的调用过程中解放出来. 1.外 ...

  5. 装饰模式 - Decorator 和 外观模式 - Facade

    装饰模式 Decorator,不改变接口但动态给对象加入责任,所需功能按顺序串联起来控制,比生成子类灵活. 外观模式 Facade,让接口更简单.为子系统中的一组接口提供一个一致的界面. 参考:

  6. Tomcat源代码-门面模式(Facade)

    从Tomcat源码提炼出设计模式-门面设计模式: 概念 外部访问内部,耦合度增加,不利于扩展.而门面模式在内部基础上进行再度封装,只提供外部想要的方法.这时访问方式由“外部---内部”变为了“外部-- ...

  7. 设计模式学习之路——Facade 外观模式(结构型模式)

    动机: 组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战.如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系 ...

  8. mock the facade

    mock the facade: Auth::shouldReceive('user')->andReturn($user = m::mock('StdClass')); $user->s ...

  9. C++设计模式-Facade模式

    Facade模式 作用:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 动机 将一个系统划分成为若干个子系统有利于降低系统的复杂性.一 ...

  10. Facade(外观)-对象结构型模式

    1.意图 为子系统中的一组接口提供一个一致的接口,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 2.动机 将一个系统划分成若干子系统有利于降低系统的复杂性.一个常见的设计目 ...

随机推荐

  1. c语言-交换两个整数

    使用c来写一个函数来实现交换两个整数. 第一种 一般的方法,引用中间变量,方便快捷. void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = t ...

  2. Django model '__week_day'与python datetime的weekday()

    上周出了个bug,按星期几查询数据的时候,发现查到的数据与显示的星期几并不相符,后来发现代码中按星期几查询,有的地方用的是Django QuerySet提供的'__week_day',有的地方用的是p ...

  3. ionic安装指定版本

    npm install -g ionic@1.4.0 原文地址:http://stackoverflow.com/questions/30316994/how-to-install-specific- ...

  4. Trace-跟踪高消耗的语句需添加哪些事件

    通常接手一台数据库服务器后,我们会开启Profiler跟踪来了解SQL Server的繁忙情况.我们首先会想到的是监控CPU或Duration超过某一阈值的语句/过程.那么所创建的Trace添加哪些事 ...

  5. c# AES加解密并转ASCII码

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Sec ...

  6. How to use PEM of PPAS

    -bash-4.1$ pwd/opt/PostgresPlus/9.3AS/client-v4/scripts -bash-4.1$ lsclient launchPEMClient.sh -bash ...

  7. Winform 主窗体更换 构造函数传值

    制作登录窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form ...

  8. jsp 环境配置记录

    1. jdk,下载地址1 环境变量配置: 1)新建 JAVA_HOME 变量 . 变量值填写jdk的安装目录(本人是 C:\Java\jdk1.7.0) 2)  系统变量→寻找 Path 变量→编辑 ...

  9. 用C++实现的SDK跨平台心得体会

    C/C++的跨平台特性相比于Java更加原生(Java是一次编译到处运行,而C/C ++则需要拿着源码重新编译一遍),实现一个C/C++跨平台程序一般有几点做法: 1.使用Qt 2.使用ANSI C/ ...

  10. SqlServer分区表概述(转载)

    什么是分区表 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...