外观模式——让接口更简单
外观模式:Facade /fəˈsɑːd/
- 目标:
- 初接触此模式时,熟悉最常用的使用方式。
- 有更深的理解后,再研究其他使用方法。
1. 基础概念
- 定义/意图:
让接口更简单
- 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
- 别名:
- 类图/结构:
- 出场嘉宾
- Facade:外观
- 知道哪些子系统负责处理哪些请求;
- 将客户请求代理给适当的子系统;
- Subsystem Classes:其他子系统类
- 实现子系统的功能;
- 处理由 Facede 指派的任务;
- 没有 Facade 的任何信息;
- Facade:外观
- 协作/工作流程
- 客户 -> Facade -> Subsystem
- 客户发送请求给 Facede;
- Facede 将请求适当转发到子系统;
- 子系统完成请求工作,返回请求结果给 Facede;
- Facede 返回请求结果给客户;
2. 解决什么问题?如何解决?
- 降低系统间的通信和相互依赖关系。
3. 优缺点是什么?
3.1 优点
- 对客户屏蔽子系统组件,减少客户处理得对象数目并使得子系统使用更方便。
- 实现了子系统和客户之间的松耦合关系。
- Facade 模式有助于建立层次 结构系统。
- 如应用需要,可以不限制它们使用子系统类。
3.2 缺点
4. 使用场景是什么?
- 当需要为一个复杂的子系统提供一个简单接口时;
- 客户程序与抽象类的实现部分之间存在着较大的依赖性。
- 引入外观模式将这个子系统与客户一级其他子系统分离,提高子系统的独立性和可移植性。
- 构建一个层次结构的子系统时,可以用外观模式来定义子系统中每层的入口点。
- 如果子系统间相互依赖,可以让它们仅通过外观模式进行通讯,从而简化依赖关系。
5. 注意
- 实现时注意:
- 降低客户 - 子系统的耦合度。使用
抽象类实现Facade
而它的具体子类对应于不同的子系统实现
。 - 公共子系统类与私有子系统类。
- 子系统公共接口:包含所有用户程序可以访问的类。
- 子系统私有接口:仅用于对子系统进行扩充。
- Facade 类是公共接口的一部分。
- 降低客户 - 子系统的耦合度。使用
6. 应用实例?
w. 待办
x. 疑问
y. 拓展
- 将一个系统划分为多个子系统有利于降低系统的复杂度。
- 个人理解:这个就类似于 ios 里面的捷径 App,一个捷径可以包含多种操作。
z. 参考
- 《设计模式:可复用面向对象软件的基础》
- 《Head First 设计模式》