bigtalk.jpg

第12章 牛市股票还会亏钱?——外观模式

定义

为子系统中的一组接口提供一个一致的界面,定义一个高层的接口/类,让这个高层的接口/类负责与子系统众多复杂的接口调用,而对使用者只提供简单的接口。

在外观模式中,使用者直接与外观类交互,而不用与各个子系统交互,与子系统的交互由外观类完成。(通过第三者的迪米特原则,与面向接口的依赖倒转原则)

例子:基金与股票,股民直接对众多股票进行买卖,风险大;股民买基金,而基金操作的专业人员与众多股票买卖,风险小。

实现

  • Facade: 外观类, 一方面向客户提供高层接口,另一方面知道具体处理请求的子系统。
  • SubsystemX: 各个子系统类(与外观类可能是组合关系),里面包括各种复杂的方法。这些子类中没有Facade的任何引用。
  • Client: 客户请求时调用外观类高层接口,外观类将客户的请求***给适当的子系统对象。

外观模式类图实现

img

外观模式使用方式:

img

使用场景

  • 设计阶段,有意识的分层,如数据访问、业务逻辑、表示层,为层间建立外观。
  • 开发阶段,子类众多,为复杂的关系建立外观接口减少依赖。
  • 维护阶段,旧有系统复杂,为其设计一个外观类(接口),一方面实现让客户通过外观类使用旧系统,另一方面实现外观类与旧系统的复杂接***互。

其它

  • 与***模式区别与联系:两者都是通过第三者直接调用到实际的对象方法。有不同在于:***模式的第三者与实际对象接口一模一样,仅做传递消息与控制等作用,而外观模式的第三者接口简化了实际的接口,是一个封装层。