标签:
facade 门面模式定义:有的人也叫它外观模式
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。
模式说明:
子系统(SubSystem):负责处理复杂的逻辑处理。不直接跟客户打交道。
门面(Facade):负责跟子系统进行交互,提供简单易用的功能或接口给客户。
客户(Client):通过门面和子系统进行交互,不需关心子系统的细节。
主要作用:
c++实现代码(网上大牛提供)
1 #include <iostream> 2 using namespace std; 3 4 //摄像机类 5 class Camera 6 { 7 public: 8 Camera() 9 { 10 11 } 12 13 ~Camera() 14 { 15 16 } 17 //摄像机打开的方法 18 void TrunOn() 19 { 20 cout << "摄像机打开!" << endl; 21 } 22 //摄像机关闭的方法 23 void TrunOff() 24 { 25 cout << "摄像机关闭!" << endl; 26 } 27 //摄像机角度调整的方法 28 void Rotate(int degrees) 29 { 30 cout << "Rotate the camera by "<< degrees << "degrees!" <<endl; 31 } 32 }; 33 34 //灯光类 35 class Light 36 { 37 public: 38 Light() 39 { 40 41 } 42 43 ~Light() 44 { 45 46 } 47 //灯光打开的方法 48 void TrunOn() 49 { 50 cout << "灯光打开!" << endl; 51 } 52 //灯光关闭的方法 53 void TrunOff() 54 { 55 cout << "灯光关闭!" << endl; 56 } 57 }; 58 59 //屏幕类 60 class Screen 61 { 62 public: 63 Screen() 64 { 65 66 } 67 68 ~Screen() 69 { 70 71 } 72 //显示器打开方法 73 void TrunOn() 74 { 75 cout << "显示器打开!" << endl; 76 } 77 //显示器关闭方法 78 void TrunOff() 79 { 80 cout << "显示器关闭!" << endl; 81 } 82 }; 83 84 //门面类,屏蔽掉客户对上述设备的直接访问,统一让他们通过这个门面提供的 API 来访问那些设备 85 class Facade 86 { 87 private: 88 //摄像机 89 Camera *m_camera; 90 //灯光 91 Light *m_lights; 92 //屏幕 93 Screen *m_Screen; 94 95 public: 96 //初始化 97 Facade() 98 { 99 m_camera = new Camera(); 100 m_lights = new Light(); 101 m_Screen = new Screen(); 102 } 103 104 ~Facade() 105 { 106 delete m_camera; 107 delete m_lights; 108 delete m_Screen; 109 } 110 //激活设备的方法 111 void Activate() 112 { 113 cout << "激活设备开始直播!" << endl; 114 //开启摄像机 115 m_camera->TrunOn(); 116 //调整摄像机角度 117 m_camera->Rotate(90); 118 //开启灯光 119 m_lights->TrunOn(); 120 //开启屏幕 121 m_Screen->TrunOn(); 122 123 } 124 //关闭所有设备的方法 125 void Deactivate() 126 { 127 cout << "关闭设备!" << endl; 128 //关闭摄像机 129 m_camera->TrunOff(); 130 //摄像机角度复位 131 m_camera->Rotate(0); 132 //关闭灯光 133 m_lights->TrunOff(); 134 //关闭屏幕 135 m_Screen->TrunOff(); 136 } 137 }; 138 139 int main() 140 { 141 //因为要使用门面模式,实例化门面类 142 Facade * m_facade = new Facade(); 143 //让客户,统一的使用门面,来统一去调度那些设备,解耦合 144 m_facade->Activate(); 145 cout << "直播中!" << endl; 146 m_facade->Deactivate(); 147 148 return 0; 149 }
激活设备开始直播!
摄像机打开!
Rotate the camera by 90degrees!
灯光打开!
显示器打开!
直播中!
关闭设备!
摄像机关闭!
Rotate the camera by 0degrees!
灯光关闭!
显示器关闭!
Program ended with exit code: 0
如果不使用门面类的话,每一个客户都要直接去调用设备,这样使得客户端的代码很复杂,还会使得设备直接暴露!且可读性差。
标签:
原文地址:http://www.cnblogs.com/kubixuesheng/p/4373424.html