快捷搜索:  汽车  科技

设计模式3大特点:设计模式之外观模式

设计模式3大特点:设计模式之外观模式优点:你可以让自己的代码独立于复杂子系统。缺点:外观可能成为与程序中所有类都耦合的上帝对象。javax.faces.context.FacesContext 在底层使用了 Life­Cycle、 View­Handler 和 Navigation­Handler 这几个类, 但绝大多数客户端不知道。 javax.faces.context.ExternalContext 在内部使用了 Servlet­Context、 Http­Session、 Http­Servlet­Request、 Http­Servlet­Response 和其他一些类。如何识别外观模式外观可以通过使用简单接口, 但将绝大部分工作委派给其他类的类来识别。 通常情况下, 外观管理着其所使用的对象的完整生命周期。

为了巩固跟复习22个设计模式,每天不定时发表一篇关于设计模式的文稿!今天写的是结构型模式中的 “外观模式(门面模式、Facade)”。

创建型模式:外观模式(门面模式)->

  • 定义

外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。

  • 外观模式结构

设计模式3大特点:设计模式之外观模式(1)

外观模式结构

  1. 外观 (Facade) 提供了一种访问特定子系统功能的便捷方式, 其了解如何重定向客户端请求, 知晓如何操作一切活动部件。
  2. 创建附加外观 (Additional Facade) 类可以避免多种不相关的功能污染单一外观, 使其变成又一个复杂结构。 客户端和其他外观都可使用附加外观。
  3. 复杂子系统 (Complex Subsystem) 由数十个不同对象构成。 如果要用这些对象完成有意义的工作, 你必须深入了解子系统的实现细节, 比如按照正确顺序初始化对象和为其提供正确格式的数据。子系统类不会意识到外观的存在, 它们在系统内运作并且相互之间可直接进行交互。
  4. 客户端 (Client) 使用外观代替对子系统对象的直接调用。
  • 适应场景
  1. 如果你需要一个指向复杂子系统的直接接口, 且该接口的功能有限, 则可以使用外观模式。
  2. 如果需要将子系统组织为多层结构,可以使用外观模式。
  • 实现方式
  1. 考虑能否在现有子系统的基础上提供一个更简单的接口。 如果该接口能让客户端代码独立于众多子系统类, 那么你的方向就是正确的。
  2. 在一个新的外观类中声明并实现该接口。 外观应将客户端代码的调用重定向到子系统中的相应对象处。 如果客户端代码没有对子系统进行初始化, 也没有对其后续生命周期进行管理, 那么外观必须完成此类工作。
  3. 如果要充分发挥这一模式的优势, 你必须确保所有客户端代码仅通过外观来与子系统进行交互。 此后客户端代码将不会受到任何由子系统代码修改而造成的影响, 比如子系统升级后, 你只需修改外观中的代码即可。
  4. 如果外观变得过于臃肿, 你可以考虑将其部分行为抽取为一个新的专用外观类。
  • 外观模式的优缺点

优点:你可以让自己的代码独立于复杂子系统。

缺点:外观可能成为与程序中所有类都耦合的上帝对象。

  • 在Java 中外观模式的应用

javax.faces.context.FacesContext 在底层使用了 Life­Cycle、 View­Handler 和 Navigation­Handler 这几个类, 但绝大多数客户端不知道。 javax.faces.context.ExternalContext 在内部使用了 Servlet­Context、 Http­Session、 Http­Servlet­Request、 Http­Servlet­Response 和其他一些类。

  • 如何识别外观模式

外观可以通过使用简单接口, 但将绝大部分工作委派给其他类的类来识别。 通常情况下, 外观管理着其所使用的对象的完整生命周期。

猜您喜欢: