C++ 设计模式-外观模式
外观模式的定义
外观模式是一种 结构型设计模式,它通过提供一个简化的接口来隐藏系统的复杂性。外观模式的核心思想是:
- 封装复杂子系统:将多个复杂的子系统或组件封装在一个统一的接口后面。
- 提供简单接口:为客户端提供一个更简单、更易用的接口,而不需要客户端直接与复杂的子系统交互。
外观模式就像一个“前台接待员”,客户端只需要与这个接待员打交道,而不需要了解后台复杂的运作机制。
外观模式的核心思想
-
简化接口
外观模式通过提供一个高层次的接口,隐藏了子系统的复杂性。客户端只需要调用外观接口,而不需要了解子系统的具体实现。 -
解耦客户端与子系统
客户端不需要直接依赖子系统中的多个类,而是通过外观类与子系统交互。这降低了客户端与子系统之间的耦合度。 -
统一入口
外观模式为子系统提供了一个统一的入口点,客户端只需要与这个入口点交互,而不需要关心子系统内部的细节。
外观模式的结构
外观模式通常由以下几个部分组成:
-
外观类(Facade)
- 封装了子系统的复杂性。
- 提供一个简化的接口供客户端使用。
- 负责将客户端的请求分发给适当的子系统对象。
-
子系统类(Subsystem Classes)
- 实现子系统的具体功能。
- 子系统类之间可能会相互依赖,但外观类会协调它们的工作。
-
客户端(Client)
- 通过外观类与子系统交互,而不直接调用子系统类。
外观模式的优点
-
简化客户端代码
客户端不需要了解子系统的复杂性,只需要调用外观类的简单接口。 -
降低耦合度
客户端与子系统之间的耦合度降低,子系统的变化不会直接影响客户端。 -
提高可维护性
子系统的复杂性被封装在外观类中,使得系统更易于维护和扩展。 -
更好的分层设计
外观模式可以帮助实现清晰的分层设计,将复杂的子系统与客户端分离。
外观模式的缺点
-
可能成为“上帝对象”
如果外观类过于庞大,可能会变成一个集中所有功能的“上帝对象”,违背单一职责原则。 -
性能开销
外观模式增加了一个额外的抽象层,可能会引入轻微的性能开销(通常可以忽略)。
外观模式的应用场景
-
复杂系统的简化接口
当一个系统由多个复杂的子系统组成时,可以使用外观模式提供一个简化的接口。 -
分层架构
在分层架构中,外观模式可以作为某一层的入口,隐藏下层的复杂性。 -
遗留系统封装
当需要与遗留系统集成时,可以使用外观模式封装遗留系统的复杂性,提供现代化的接口。 -
微服务网关
在微服务架构中,API 网关可以看作是一种外观模式,它为客户端提供了一个统一的入口点。