Facade(外观)模式

设计模式精解笔记 -- 提供代码和类图

  设计模式精解读书笔记,学习书籍的同时,按着自己的理解编写代码和类图。有误之处请网友指出,thanks。

一、        Facade(外观)模式

为了子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

Façade模式:关键特征

意图

希望简化现有系统的使用方法。你需要定义自己的接口

问题

只需要使用一个复杂系统的一个子集。或者,需要用一种特殊的方式与系统交互。

解决方案

Façade向客户展现使用现有系统的一个新的接口

参与者和协作者

向客户展现一个定制的接口,让客户更容易地使用现有系统

效果

Façade模式简化了对所需子系统的使用。但是,由于Façade并不完整,因此某些功能对于客户是不可用的

实现

Ø 定义一个(或一组)新的类来提供所需的接口

Ø 让新的类使用现有的系统

  Facade(外观)模式_第1张图片

1.1

 

Façade模式:实例1

意图

希望简化现有系统的使用方法。你需要定义自己的接口

问题

如图1.1original_system有多个函数,client只需要用到其中的funA

解决方案

Façadeclient展现使用original_system的一个新的接口fun

参与者和协作者

向客户展现一个定制的接口,让客户更容易地使用现有系统

效果

Façade模式简化了对所需子系统的使用。但是,由于Façade并不完整,因此funBfunC对于client是不可用的

实现

Ø 定义一个新的类Facade来提供所需的接口

Ø 让新的类Facade使用现有的系统original_system

如图1.2

 

 Facade(外观)模式_第2张图片

1.2
#include <iostream> using namespace std; class original_system { public: void funA(){ cout << "process funA!" << endl; } void funB(){ cout << "process funB!" << endl; } void funC(){ cout << "process funC!" << endl; } }; class Facade { public: void fun() { orig_sys->funA(); } Facade() { orig_sys = new original_system; } private: original_system* orig_sys; }; int main() { Facade* pfacade = new Facade; pfacade->fun(); return 0; }

Façade模式:实例2

意图

希望简化现有系统的使用方法。你需要定义自己的接口

问题

如图1.3,有多个类,客户(main函数)只需要使用顺序使用他们

解决方案

Façade向客户展现使用多个类的一个新的接口fun

参与者和协作者

向客户展现一个定制的接口,让客户更容易地使用现有系统

效果

Façade模式简化了对所需子系统的使用。

实现

Ø  定义一个新的类Facade来提供所需的接口

Ø  让新的类Facade使用现有的多个类

如图1.4

Facade(外观)模式_第3张图片
1.3
Facade(外观)模式_第4张图片

1.4

#include <iostream> using namespace std; class classA { public: void fun(){ cout << "process classaA's fun!" << endl; } }; class classB { public: void fun(){ cout << "process classaB's fun!" << endl; } }; class classC { public: void fun(){ cout << "process classaC's fun!" << endl; } }; class Facade { public: void fun() { claA->fun(); claB->fun(); claC->fun(); } Facade() { claA = new classA; claB = new classB; claC = new classC; } ~Facade() { if (claA) { delete claA; } if (claB) { delete claB; } if (claC) { delete claC; } } private: classA* claA; classB* claB; classC* claC; }; int main() { Facade* pfacade = new Facade; pfacade->fun(); return 0; }   

你可能感兴趣的:(Facade(外观)模式)