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

软件开发常用设计模式—门面模式总结

时间:2015-04-03 00:03:26      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

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

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