Trey blog.

读设计模式解析(四)

Facade模式

Facade模式定义了一个更高层的接口,使子系统更加容易使用

我们需要用一种比原有的方式与系统交互,或者说,我们需要以一种特殊的方式使用系统。

意图 希望简化原有系统的使用方式。需要定义自己的接口。
问题 只需要使用某个复杂系统的子集,或者,需要以一种特殊的方式与系统交互。
解决方案 Facade 为原有系统的客户提供了一个新的接口。
参与者与协作者 为客户提供的一个简化接口,使系统更容易使用。
效果 Facade 模式简化了对所需子系统的使用过程。但是,由于 Facade 并不完整,因此客户可能无法使用某些功能。
实现 定义一个(或多个)具备所需接口的新类。让新的类使用原有的系统。

Facade

使用Facade

Facade应用场景

  • 不需要使用一个复杂系统的所有功能,而且可以创建一个新的类, 包含访问系统的所有规则。如果只需要使用系统的部分功能(这是通常的情况),那么你为新类所创建的API将比原系统的API简单得多

  • 希望封装或者隐藏原系统

  • 希望使用原系统的功能,而且还希望增加一些新的功能

  • 编写新类的成本小于所有人学会使用或者未来维护原系统上所需的成本。

封装的原因

  • 跟踪系统的使用情况——通过强制所有对系统的访问都必须经过Facade,可以很容易地监视系统的使用情况。
  • 改换系统——未来可能需要切换系统。通过将原系统作为 Facade 类的一个私有成员,可以最省力地将切换到新的系统。当然,可能还要做很多工作, 但是至少我只需在一个地方修改代码(Facade 类)就行了。