外观模式——java设计模式(十二)

简介

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

  • 客户端与子系统之间的交互复杂,需要外观模式提供统一的接口,简化类之间的交互。又称门面模式,是迪米特法则的一种实现。

结构与实现

  • 角色包括:
    • 外观角色:供客户端调用,将客户端的请求分配给响应的子系统进行处理,并组织处理流程。
    • 子系统角色:每一个子系统可以被客户端直接调用或者经过外观角色调用。
  • 外观模式结构。
    180508.facade.png

实例

  • 开发一个可以用于多个软件的文件加密模块,需要读取文件、加密、保存加密文件。三部分代码相互独立,为了符合单一职责原则,这三部分代码封装在各自的类中。
  • 读取保存文件通过FileInputStream和FileOutputStream实现,加密使用某种加密方式,如求模运算。
    180508.entrypt.png

抽象外观类

  • 外观模式在一定程度上不符合开闭原则,增加新的子系统需要修改外观类。
  • 引入抽象外观类,客户端针对抽象编程,通过配置文件动态加载具体外观类。子系统调整只需要增加新的具体外观类。
    180508.abstract.png

优缺点和适用环境

  • 优点:
    • 减少客户端关联的类。使客户端关联子系统的类减少,使用子系统更加容易。
    • 实现客户端和子系统的松耦合。子系统相互独立,变化不会影响到其他子系统和客户端,只需要调整外观类。
  • 缺点:
    • 限制客户端访问困难。如果过多限制客户端访问子系统,则会极大减少可变性和灵活性。
    • 可能修改源码。设计不当,增加子系统会修改外观类源码,违背开闭原则。
  • 适用环境:
    • 为访问一系列复杂子系统提供简单的入口。
    • 客户端和子系统之间存在很大依赖。
    • 层次化结构中使用外观模式定义每一层的入口,层与层不直接产生联系,降低耦合度。

jdk中的应用

  • Class类,提供有关类信息的一系列接口,方便操作类的域、方法等。

猜你喜欢

转载自blog.csdn.net/qq_40369829/article/details/80265900