标签:style blog http color os strong io 2014
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行。
门面(Facade):
客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。
子系统(subsystem):
可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。
Facade.h
1 //Facade.h 2 # ifndef _FACADE_H_ 3 # define _FACADE_H_ 4 5 class Subsystem1 6 { 7 public: 8 Subsystem1(); 9 ~Subsystem1(); 10 void Operation(); 11 protected: 12 private: 13 }; 14 15 class Subsystem2 16 { 17 public: 18 Subsystem2(); 19 ~Subsystem2(); 20 void Operation(); 21 protected: 22 private: 23 }; 24 25 class Facade 26 { 27 public: 28 Facade(); 29 ~Facade(); 30 void OperationWrapper(); 31 protected: 32 private: 33 Subsystem1* p_subs1; 34 Subsystem2* p_subs2; 35 }; 36 37 # endif
Facade.cpp
1 //Facade.cpp 2 # include <iostream> 3 # include "Facade.h" 4 using namespace std; 5 6 Subsystem1::Subsystem1() {} 7 Subsystem1::~Subsystem1() {} 8 void Subsystem1::Operation() 9 { 10 cout << "Subsystem1::Operation" << endl; 11 } 12 13 Subsystem2::Subsystem2() {} 14 Subsystem2::~Subsystem2() {} 15 void Subsystem2::Operation() 16 { 17 cout << "Subsystem2::Operation" << endl; 18 } 19 20 Facade::Facade() 21 { 22 this->p_subs1 = new Subsystem1(); 23 this->p_subs2 = new Subsystem2(); 24 } 25 Facade::~Facade() 26 { 27 delete p_subs1; 28 delete p_subs2; 29 } 30 void Facade::OperationWrapper() 31 { 32 this->p_subs1->Operation(); 33 this->p_subs2->Operation(); 34 }
main.cpp
1 //main.cpp 2 # include <iostream> 3 # include "Facade.h" 4 using namespace std; 5 6 int main() 7 { 8 Facade* fac = new Facade(); 9 fac->OperationWrapper(); 10 return 0; 11 }
result:
blank@linux-bai:~/Projects/Facade> g++ -o a *.cpp && ./a
Subsystem1::Operation
Subsystem2::Operation
外观模式的例子:
如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、缴费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。
首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴款,才能到化验部门做化验。化验后,再回到门诊室。
解决这种不便的方法便是引进门面模式。可以设置一个接待员的位置,由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是门面模式的体现,病人只接触接待员,由接待员负责与医院的各个部门打交道。
Facade Pattern(外观模式),布布扣,bubuko.com
标签:style blog http color os strong io 2014
原文地址:http://www.cnblogs.com/blank031x/p/3865713.html