12 façade外观模式(结构/架构)
12 façade(结构/架构)
-
- 动机:
- 将系统构造为子系统有助于降低复杂性。
- 一个常见的设计目标是最小化子系统之间的通信和依赖关系。
- 实现这一目标的一种方法是引入一个facade对象,该对象为子系统提供一个单一的、简化的接口。
- 什么时候用:
- 您希望为复杂的子系统提供一个简单的接口。
- 客户端和抽象的实现类之间有许多依赖关系。
- 动机:
引入facade来将子系统与客户端和其他子系统分离开来,从而促进子系统的独立性和可移植性。
-
- 你想要分层你的子系统。使用facade来定义每个子系统级别的入口点。
-
- 结果:
- 它保护客户端不受子系统组件的影响。
- 它促进子系统和它的客户端之间的弱耦合。
- 它并不阻止应用程序在需要的时候使用子系统类。
- 设计原则:
- 最小知识原则
- 实现问题:
- 不要向facade引入新的行为
- 如果这些行为是由子系统实现的,那么扩展facade。
- 如果这些行为还没有被子系统实现,那么扩展子系统和外观。
- 减少客户与子系统之间的耦合
- 使Facade成为具有具体子类的抽象类,用于实现不同的子系统。这种抽象耦合使客户机无法知道使用了哪个子系统的实现。
- 不要向facade引入新的行为
- 总结:
- 从客户角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于内部组件与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果,子系统内部任何变化不会影响到Facade接口的变化。
- Facade模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facade更多是一种架构设计模式。
- Facade对应的组件应该是“相互耦合关系比较大”的一系列组件,而不是一个简单功能的集合。
- Facade注重简化接口;Adapter注重转换接口;Decorater注重稳定接口的前提下为对象扩展功能。
- 结果: