码迷,mamicode.com
首页 > 其他好文 > 详细

Facade Pattern(外观模式)

时间:2014-07-24 17:31:38      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   strong   io   2014   

  • 外观(Facade)模式:

  外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行。

 

  • 外观模式的结构:

bubuko.com,布布扣

 

门面(Facade):

  客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。

子系统(subsystem):

  可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。

 

Facade.h

bubuko.com,布布扣
 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
View Code

 

Facade.cpp

bubuko.com,布布扣
 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 }
View Code

 

main.cpp

bubuko.com,布布扣
 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 }
View Code

 

result:

blank@linux-bai:~/Projects/Facade> g++ -o a *.cpp && ./a
Subsystem1::Operation
Subsystem2::Operation

 

外观模式的例子:

  如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、缴费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。

  首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴款,才能到化验部门做化验。化验后,再回到门诊室。

 

  解决这种不便的方法便是引进门面模式。可以设置一个接待员的位置,由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是门面模式的体现,病人只接触接待员,由接待员负责与医院的各个部门打交道。

Facade Pattern(外观模式),布布扣,bubuko.com

Facade Pattern(外观模式)

标签:style   blog   http   color   os   strong   io   2014   

原文地址:http://www.cnblogs.com/blank031x/p/3865713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!