大话设计模式读书笔记-12外观模式
2020-03-25 本文已影响0人
QuietHeart
![](https://img.haomeiwen.com/i792769/a2bc4699ab739b22.jpg)
第12章 牛市股票还会亏钱?——外观模式
定义
为子系统中的一组接口提供一个一致的界面,定义一个高层的接口/类,让这个高层的接口/类负责与子系统众多复杂的接口调用,而对使用者只提供简单的接口。
在外观模式中,使用者直接与外观类交互,而不用与各个子系统交互,与子系统的交互由外观类完成。(通过第三者的迪米特原则,与面向接口的依赖倒转原则)
例子:基金与股票,股民直接对众多股票进行买卖,风险大;股民买基金,而基金操作的专业人员与众多股票买卖,风险小。
实现
- Facade: 外观类, 一方面向客户提供高层接口,另一方面知道具体处理请求的子系统。
- SubsystemX: 各个子系统类(与外观类可能是组合关系),里面包括各种复杂的方法。这些子类中没有Facade的任何引用。
- Client: 客户请求时调用外观类高层接口,外观类将客户的请求代理给适当的子系统对象。
外观模式类图实现
外观模式使用方式:
使用场景
- 设计阶段,有意识的分层,如数据访问、业务逻辑、表示层,为层间建立外观。
- 开发阶段,子类众多,为复杂的关系建立外观接口减少依赖。
- 维护阶段,旧有系统复杂,为其设计一个外观类(接口),一方面实现让客户通过外观类使用旧系统,另一方面实现外观类与旧系统的复杂接口交互。
其它
- 与代理模式区别与联系:两者都是通过第三者直接调用到实际的对象方法。有不同在于:代理模式的第三者与实际对象接口一模一样,仅做传递消息与控制等作用,而外观模式的第三者接口简化了实际的接口,是一个封装层。