设计模式(10) 外观模式(FACADE)

问题聚焦:
    设计一个系统时,比较常见的作法是将它划分为若干个小的系统,互相协做,组成一个大的系统。
    那么,在设计这些小系统时,须要注意一些什么呢?
    外观模式为何能够让子系统更加容易的使用呢?(最小化子系统之间的通讯和相互依赖关系,即下降耦合度)
意图:
    为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
动机:
    将一个系统划分为若干个子系统有利于下降系统的复杂性。
    一个常见的设计目标是使子系统间的通讯和相互依赖关系达到最小。
    达到该目标的途径之一就是引入一个外观对象,它为子系统中较通常的设施提供了一个单一而简单的界面。
    其思想以下图所示:
     Demo:以编译器子系统的设计为例,说明外观模式的思想:
     子系统类划分:Scanner, Parser, ProgramNode, BytecodeStream, ProgramNodeBuilder
     要求:对普通用户提供一个高层的,单一而简单的编译子系统接口
              对高级专业的用户提供底层功能,能够直接访问具体的子系统类。
     设计:
   
     Compiler类(关键),其职责为两点:    
    1)为用户屏蔽子系统,提供一个高层的简单的使用接口;
    2)不彻底隐藏实现编译功能的那些子系统类,使得少数懂的如何使用底层功能的人能够调用这些功能。

适用性:
在遇到如下状况使用Facade模式:
  • 为一个复杂子系统提供一个简单接口。
  • 客户程序与抽象类的实现部分之间存在很大的依赖性。
  • 当你须要构件一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。若是子系统之间是相互依赖的,能够让它们仅经过facade进行通信,从而简化了它们之间的依赖关系。

结构:ui

 

    
相关文章
相关标签/搜索