Java设计模式——外观模式

Java设计模式——外观模式

  • 外观模式
    • 定义
    • 结构
    • 类图
    • 实现过程
    • 抽象外观类
      • 类图
      • 实现过程
    • 优点
    • 缺点
    • 适用环境

外观模式

定义

为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层结构,这个接口使得这一子系统更加容易使用。

结构

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

SubSystem(子系统角色):在软件系统中可以有一个或者多个子系统角色。每一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的功能。它处理由外观类传过来的请求。

类图

Java设计模式——外观模式_第1张图片

实现过程

定义一些实现功能的类,然后再定义一个类去关联它们。客户端可以通过调用这个类的方法实现不直接关联实现功能的类也可以完成功能。

抽象外观类

类图

Java设计模式——外观模式_第2张图片

实现过程

创建一个抽象类(抽象外观类),然后创建一些类(具体外观类)去继承并实现其中的方法。同时具体外观类要关联功能类(子系统角色)。和之前的就是增加了个抽象层,面向抽象编程,方便扩展。

优点

  1. 它对客户端屏蔽了子系统,减少了客户端数据处理的对象数目。
  2. 实现了直系统与客户端之间的松耦合关系。子系统的变化不会影响到调用它的客户端。
  3. 一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。

缺点

  1. 不能很好地限制客户端直接使用子系统类。如果对客户端访问子系统类做太多的限制,则减少了可变性和灵活性。
  2. 如果设计不当,增加新的子系统,可能需要修改外观类的源代码,违背开闭原则。

适用环境

  1. 当要为访问一系列复杂的子系统提供一个简单的模式,可以使用外观模式。
  2. 客户端程序和多个子系统之间存在很大的依赖性。引入外观类可以将子系统与客户端解耦,从而提高子系统的独立性和可移植性。
  3. 在层次化结构中可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。

你可能感兴趣的:(Java设计模式,java,设计模式)