子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更容易使用,就是说 需要有一条比现有的与一个系统交互的途径更简单的途径或是需要用一种特殊的方式使用这个系统。通过这个界面,其他系统可以方便地调用子系统的功能,而忽略子系统内部发生的变化:
适用场合:1> 为一个比较复杂的子系统提供一个简单的接口
2> 将客户程序子系统的实现部分分离,提高子系统的独立特行和可移植性
3> 简化子系统间的依赖关系
注:子系统是提供一系列相关的特征(功能)而紧密关联的一组
意图:希望简化现有系统的使用方法,需要定义自己的接口
问题:只需要使用一个复杂系统的一个子集,或者,需要用一种特殊的方式与系统交互
解决方案:Facede 向客户展现使用现有系统的一个新的接口
参与者 与 协作者:向客户展现一个定制的接口,让客户更容易地使用现有系统
效果:Facede 模式简化对所需子系统的使用,由于 Facade 并不完整,因此某系功能对于客户可能是不可用的
实现:定义一个新的类来提供所需的接口,让新的类使用现有的系统
使用 Facede模式 可以减少客户需要处理对象的数量
Facede 模式试用情况:
1> 不需要使用一个复杂系统的所有功能,并且可以创建一个新的类来包容访问原有系统所使用的所有规则,如果创建的 API 是原始系统接口的一个子集,通常是比原系统的 API 简单得多
2> 希望包装或隐藏原有系统
3> 希望使用原有系统的功能,并且增加一些新的功能
4> 编写一个新的类 的代价小于 让所有人都学会使用原有系统 或在未来维护整个系统 所需的代价
Facade模式 简化接口
外观模式降低了子系统和客户端的耦合度
应用外观模式注意事项
1> 在设计外观时,不需要增加额外的功能
2> 不要从外观方法中返回子系统中的组件给客户
3> 应用外观的目的是提供一个高层次的接口
注:外观模式最适合提供特定的高层次的业务服务,而不是进行底层次的单独的业务执行