C++设计模式——门面模式(facade pattern)

一、原理讲解

门面模式也叫做外观模式,实质就是一个封装接口,通常是将一类功能或者一个层次功能用一个函数封装起来,供客户端统一调用。

1.1意图

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

1.2应用场景

  • 当你要为一个复杂子系统提供一个简单接口时;
  • 客户程序与抽象类的实现部分之间存在着很大依赖性;
  • 当你需要构建一个层次的子系统时,使用Facade模式定义子系统中每层的入口点;

1.3结构图(UML图)

C++设计模式——门面模式(facade pattern)_第1张图片

1.4代码实现步骤

a1 定义一个门面接口类Facade,定义两个接口函数openSwitch()和closeSwitch(),提供客户端统一调用;
a2 定义两个子系统类Television和WaterHeater,都拥有两个成员函数openSwitch()和closeSwitch(),两个的功能都需要打开开关和关闭开关;
a3 在门面类Facade的成员函数openSwitch()和closeSwitch()中,统一调用调用子系统的开启开关和关闭开关功能;

二、实现代码

比如本例子中所有打开开关和关闭开关分别是两个接口,比如电视、热水器都要打开开关,所以可以用门面模式用一个打开开关接口统一隔离和管理;
FacadePattern.cpp

#include 

using namespace std;

#define DELETE(pointer) delete pointer; pointer=nullptr

class Television {
     
public:
	void openSwitch() {
      cout << "open switch of Television!" << endl; }
	void closeSwitch() {
      cout << "close switch of Television!" << endl; }
};

class WaterHeater {
      
public:
	void openSwitch() {
      cout << "open switch of WaterHeater!" << endl; }
	void closeSwitch() {
      cout << "close switch of WaterHeater!" << endl; }
};


class FacadePattern {
      //门面模式
public:
	void openSwitch() {
     	television.openSwitch(); waterHeater.openSwitch(); } //提供客户端使用的统一接口
	void closeSwitch() {
      television.closeSwitch(); waterHeater.closeSwitch(); }

private:
	Television television; //子系统类,只跟门面模式类耦合,不跟客户端偶尔;实现子系统与客户端的接口隔离
	WaterHeater waterHeater;
};

void doFacadePattern()
{
     
	FacadePattern *facadePattern = new FacadePattern(); 
	facadePattern->openSwitch();
	facadePattern->closeSwitch();
	DELETE(facadePattern);
}

mian.cpp

#include 

extern void doFacadePattern();

int main()
{
     
	doFacadePattern();

	system("pause");
	return 1;
}

C++设计模式——门面模式(facade pattern)_第2张图片

三、总结

门面模式主要意图就是提供统一接口,实现子系统和客户端接口隔离,降低系统耦合度,有利于复杂系统功能模块统一管理和编程,使得初级程序员也能够参与大型项目,只需要将其写的代码功能用一个接口隔离开来,然后单元测试,而不影响其它模块。

四、参考内容

设计模式C++实现:门面模式
设计模式 c++版(16)——门面模式
陈建忠设计模式(参考:哔哩哔哩C++设计模式!!!)
Erich Gamma,Richard Helm.《设计模式 可复用面向对象软件的基础》[M].机械工业出版社,2019:

你可能感兴趣的:(设计模式,设计模式,c++,门面模式,facade,外观)