首页 > 代码库 > Facade 模式

Facade 模式

在软件系统开发中经常回会遇到这样的情况,你实现了一些接口(模块),而这些接口(模块)都分布在几个类中(比如 A和 B、C、D) :A中实现了一些接口,B 中实现一些接口(或者 A代表一个独立模块,B、C、D代表另一些独立模块) 。然后你的客户程序员 (使用你设计的开发人员) 只有很少的要知道你的不同接口到底是在那个类中实现的,绝大多数只是想简单的组合你的 A-D的类的接口,他并不想知道这些接口在哪里实现的。这时我们就要用到Facade 模式,Facade 模式在高层提供了一个统一的接口。

 1 //////////////////Facade.h////////////////////////////////////////////////////////
 2 #pragma once
 3 class Subsystem1
 4 {
 5 public:
 6     ~Subsystem1();
 7     Subsystem1();
 8     void operation();
 9 protected:
10 private:
11 };
12 
13 class Subsystem2
14 {
15 public:
16     ~Subsystem2();
17     Subsystem2();
18     void operation();
19 protected:
20 private:
21 };
22 
23 class Facade
24 {
25 public:
26     ~Facade();
27     Facade();
28     void OperationWrapper();
29 protected:
30 private:
31     Subsystem1* _Subs1 ;
32     Subsystem2* _Subs2 ;
33 };
 1 ///////////Facade.cpp///////////////////////////////////////////////////////////////
 2 #include "Facade.h"
 3 #include <iostream>
 4 using namespace std;
 5 Subsystem1::Subsystem1()
 6 {
 7 
 8 }
 9 Subsystem1::~Subsystem1()
10 {
11 
12 }
13 void Subsystem1::operation()
14 {
15     cout<<"Subsystem1 operation"<<endl;
16 }
17 Subsystem2::Subsystem2()
18 {
19 
20 }
21 
22 Subsystem2::~Subsystem2()
23 {
24 
25 }
26 
27 void Subsystem2::operation()
28 {
29     cout<<"Subsystem2 operation"<<endl;
30 }
31 
32 Facade::Facade()
33 {
34     this->_Subs1 = new Subsystem1();
35     this->_Subs2 = new Subsystem2();
36 }
37 
38 Facade::~Facade()
39 {
40     delete _Subs1;
41     delete _Subs2;
42 }
43 
44 void Facade::OperationWrapper()
45 {
46     this->_Subs1->operation();
47     this->_Subs2->operation();
48 }
 1 //////////main.cpp////////////////////////////////////////////////////////////////
 2 #include "Facade.h"
 3 #include <iostream>
 4 int main()
 5 {
 6     Facade* fa = new Facade();
 7     fa->OperationWrapper();
 8     system("pause");
 9     return 0;
10 }