外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式 Facade [fəˈsɑːd]
:描述如何用单个对象表示整个子系统。为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口。体现了依赖倒转原则,典型场景: MVC
架构、基金对股票的封装等。
外观模式 Facade
类图结构
结构解析
Facade
系统对外的统一接口。SubSystem1/SubSystem2/SubSystem3
子系统及对应的功能实现。
类图可以看出,所有的类关系都仅仅是简单关联,外观模式主要体现在对外接口的统一,以及对内整个系统的封装。
示例
1 | // 1. SubSystem |
总结
外观模式隐藏了子系统的复杂性,通过高层次的结构提供统一的接口。在设计初期尽量使用外观模式来分层;开发过程中子系统越来越复杂时,外观模式提供一个统一简单的接口降低耦合性;项目后期可以通过外观类封装系统遗留代码,对外操作大大简化。
- 优点
对客户隐藏子系统细节,简述客户端和子系统的耦合性;对子系统封装接口,使得系统易用。 - 缺点
子系统所有的接口都通过外观类对外暴露,导致外观类功能过多;如果不引入抽象外观类,业务变更或者增加子系统时需要修改外观类或者客户端,不符合开闭原则。
参考文档
- 大话设计模式
Android
源码设计模式解析与实战- 外观模式