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

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

如果不使用门面类的话,每一个客户都要直接去调用设备,这样使得客户端的代码很复杂,还会使得设备直接暴露!且可读性差。

 

你可能感兴趣的:(设计模式)