原文中对外观模式的定义为:

   外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子类系统更加的容易使用【DP】.

从定义理解:

1、外观模式是为子系统提供一组接口服务的,不是一个接口,是一组;既然是一组接口,就有可能需要和很多类、很多方法打交道

2、外观模式自己也要定义个高层接口,而这个接口就是为子系统中的一组接口服务的。专业说是对子系统中在接口实现类进行逻辑封装。

3、上一篇的建造者模式,强调的是将复杂对象构建与表示分离;而外观模式则侧重子系统,有可能有很多子系统,侧重点完全不一致

UML的构造图:

从UML图中,我们看到客户端只是和外观模式的Facede打交道,根本不关心子系统类集合实现子系统的功能;这样大大降低子系统与客户端的耦合度,且客户端调用非常方便

外观模式包含如下两个角色:

      (1) Facade(外观角色):在客户端可以调用它的方法,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任;在正常情况下,它将所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理。

      (2) SubSystem(子系统角色):在软件系统中可以有一个或者多个子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的功能;每一个子系统都可以被客户端直接调用,或者被外观角色调用,它处理由外观类传过来的请求;子系统并不知道外观的存在,对于子系统而言,外观角色仅仅是另外一个客户端而已。

使用场景

在遇到以下情况使用facade模式:
    1) 当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。
        这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。facade可以提供一个简单的缺省视图,
        这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过facade层。
    2) 客户程序与抽象类的实现部分之间存在着很大的依赖性。引入 facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性 和可移植性。
    3) 当你需要构建一个层次结构的子系统时,使用 facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过facade进行通讯,从而简化了它们之间的依赖关系。

  外观模式中所指的子系统是一个广义的概念,它可以是一个类、一个功能模块、系统的一个组成部分或者一个完整的系统。子系统类通常是一些业务类,实现了一些具体的、独立的业务功能,其典型代码如下:

模拟各个子系统:

class SubSystemA
{  public void methodA()  {  //业务实现代码  }
}  class SubSystemB
{  public void methodB()  {  //业务实现代码  }
}  class SubSystemC
{  public void methodC()  {  //业务实现代码  }
}  

在引入外观类之后,与子系统业务类之间的交互统一由外观类来完成,在外观类中通常存在如下代码:

class Facade
{  private SubSystemA obj1 = new SubSystemA();  private SubSystemB obj2 = new SubSystemB();  private SubSystemC obj3 = new SubSystemC();  public void method1()  {  obj1.methodA();  obj2.methodB();  obj3.methodC();  }  
  public void method2()  {  obj1.methodA();  obj3.methodC();  }  
} 

由于在外观类中维持了对子系统对象的引用,客户端可以通过外观类来间接调用子系统对象的业务方法,而无须与子系统对象直接交互。引入外观类后,客户端代码变得非常简单,典型代码如下:

public class Client
{  public static void Main(string[] args)  {  Facade facade = new Facade();  //某项业务需求,需要调用Method1方法facade.method1();  
       //某项业务需求,此时需要调用Method2方法facede.method2();
} } 

至此,外观模式解释完毕,一句话概括:外观模式是对其他子系统部分功能进行组合、封装。

【结构型模式】《大话设计模式》——读后感 (9)牛市股票还会亏钱?——外观模式相关推荐

  1. [大话设计模式C++版] 第12章 牛市股票还会亏钱 —— 外观模式

    源码可以在这里找到 大话设计模式C++版 股民炒股代码 //main.cpp #include <iostream>using namespace std;//股票1 class Stoc ...

  2. 【设计模式】牛市股票还会亏钱 --- 外观模式

    一,概述 外观模式是软件工程中常用的一种软件设计模式.它为子系统中的一组接口提供一个统一的高层接口.使用子系统更容易使用. 二,例如 股民买股票,大部分散户自己买股票.国债.房地产,然后到时机抛售.这 ...

  3. 第十二章 牛市股票还会亏钱-外观模式(读书笔记)

    1.由于众多投资者对众多股票的联系太多,反而不利于操作,这在软件中是不是就称为耦合性过高.而有了基金以后,变成众多用户只和基金打交道,关心基金的上涨和下跌就可以了,而实际上的操作却是基金经理人在与上千 ...

  4. 《大话设计模式》之--第12章 牛市股票还会亏钱?----外观模式

    http://blog.csdn.net/monkey_d_meng/article/details/5696192 第12章 牛市股票还会亏钱?----外观模式 12.1牛市股票还会亏钱? &quo ...

  5. 大话设计模式-第12章 牛市股票还会亏钱?--外观模式

    第12章 牛市股票还会亏钱?--外观模式 12.2 股民炒股代码 //股票1 class Stock1 { //卖股票 public void Sell() { Console.WriteLine(& ...

  6. 牛市股票还会亏钱?----外观模式

    <大话设计模式>之--第12章 牛市股票还会亏钱?----外观模式 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容 ...

  7. 牛市股票还会亏钱? 外观模式

    12.1 牛市股票还会亏钱 12.2 股民炒股代码 namespace 外观模式 {class Program{static void Main(string[] args){Stock1 gu1 = ...

  8. 《大话设计模式》—— 读后感 (12)牛市股票还会亏钱?—— 外观模式

    外观模式 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.(摘抄) 外观模式体现了依赖倒转原则和迪米特法则,抽出来一个外观类作为客户端调用接口,当 ...

  9. 《大话设计模式》——读后感 (9)牛市股票还会亏钱?——外观模式

    原文中对外观模式的定义为:    外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子类系统更加的容易使用[DP]. 从定义理解: 1.外观模式是为子系统提供 ...

最新文章

  1. git 裁切_图片居中裁切.html
  2. C#拾遗系列(8):异常
  3. 2016-1-29 图解HTTP(04)
  4. SQL注入(SQL注入(SQLi)攻击)攻击-联合注入
  5. java加密文件夹_使用java.util.zip压缩文件夹,支持加密,增加描述
  6. kaptcha配置java_kaptcha 配置
  7. 分布式系统的那些事儿(六) - SOA架构体系
  8. day21 面向对象之继承和组合
  9. docker切换到linux容器模式,linux – 将虚拟主机转换到Docker容器
  10. IT运维管理是企业信息化的大管家
  11. PDE9 wave equation: general solution
  12. java反射代码,java反射
  13. ionic3 创建和启动
  14. 关于BPSK、QPSK的一些理解,以及MATLAB实现
  15. Linux查看主板型号及硬件信息
  16. 8086 CPU 内部结构
  17. Linux蓝牙系统(3) Linux 命令
  18. 穷人实现阶级跨越有多难
  19. Apache Marmony
  20. 瘦臀瘦腿的最快方法是什么?

热门文章

  1. FZU 2301 Chosen by god (组合数学+打表+快速幂)
  2. python输入end退出循环_python练习:从入门到实践——用户输入和while循环
  3. 关于嘀嘀打车产品同质化的看法
  4. matlab 图片 并行,图片尺寸批量resize的matlab并行代码
  5. error C2338: /RTCc rejects conformant code错误解决
  6. JNI NDK入门详解
  7. ANT无线通信技术(1) 简介
  8. 奇声(IQDubbing)-- 面向影视剧的AI配音技术
  9. ZOJ 3380 Patchouli's Spell Cards
  10. cmos和ccd区别对比