设计模式精解读书笔记,学习书籍的同时,按着自己的理解编写代码和类图。有误之处请网友指出,thanks。
一、 Facade(外观)模式
为了子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
Façade模式:关键特征 | |
意图 | 希望简化现有系统的使用方法。你需要定义自己的接口 |
问题 | 只需要使用一个复杂系统的一个子集。或者,需要用一种特殊的方式与系统交互。 |
解决方案 | Façade向客户展现使用现有系统的一个新的接口 |
参与者和协作者 | 向客户展现一个定制的接口,让客户更容易地使用现有系统 |
效果 | Façade模式简化了对所需子系统的使用。但是,由于Façade并不完整,因此某些功能对于客户是不可用的 |
实现 | Ø 定义一个(或一组)新的类来提供所需的接口 Ø 让新的类使用现有的系统 |
图1.1
Façade模式:实例1 | |
意图 | 希望简化现有系统的使用方法。你需要定义自己的接口 |
问题 | 如图1.1,original_system有多个函数,client只需要用到其中的funA |
解决方案 | Façade向client展现使用original_system的一个新的接口fun |
参与者和协作者 | 向客户展现一个定制的接口,让客户更容易地使用现有系统 |
效果 | Façade模式简化了对所需子系统的使用。但是,由于Façade并不完整,因此funB、funC对于client是不可用的 |
实现 | Ø 定义一个新的类Facade来提供所需的接口 Ø 让新的类Facade使用现有的系统original_system 如图1.2 |
图
1.2
Façade模式:实例2 | |
意图 | 希望简化现有系统的使用方法。你需要定义自己的接口 |
问题 | 如图1.3,有多个类,客户(main函数)只需要使用顺序使用他们 |
解决方案 | Façade向客户展现使用多个类的一个新的接口fun |
参与者和协作者 | 向客户展现一个定制的接口,让客户更容易地使用现有系统 |
效果 | Façade模式简化了对所需子系统的使用。 |
实现 | Ø 定义一个新的类Facade来提供所需的接口 Ø 让新的类Facade使用现有的多个类 如图1.4 |
图1.3
图1.4