一、什么是外观模式
为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一个系统更加容易使用。
说白了,其实就是对一系列接口的封装。
二、Facade模式的构成:
外观角色(Facade):是模式的核心,他被客户client角色调用,知道各个子系统的功能。同时根据客户角色已有的需求预订了几种功能组合。
子系统角色(Subsystemclasses):实现子系统的功能,并处理由Facade对象指派的任务。对子系统而言,facade和client角色是未知的,没有Facade的任何相关信息;即没有指向Facade的实例。
客户角色(client):调用facade角色获得完成相应的功能。
三、例子
假设我们须要完成两个工作,完成工作1我们须要依次完毕子工作Sub_Work1、Sub_Work3。完成工作2我们须要依次完毕工作Sub_Work2,Sub_Work3。Sub_Work4。为了能让用户与这些子工作分离。我们採用外观模式在中间插入一个工作处理中心Work,这个Work负责处理用户的需求已经集成对应的底层子系统,代码实现例如以下:
#include<iostream>
using namespace std;
class Sub_Work1//子工作1
{
public:
void Working1()
{
cout << "子工作1" << endl;
}
};
class Sub_Work2//子工作2
{
public:
void Working2()
{
cout << "子工作2" << endl;
}
};
class Sub_Work3//子工作3
{
public:
void Working3()
{
cout << "子工作3" << endl;
}
};
class Sub_Work4//子工作4
{
public:
void Working4()
{
cout << "子工作4" << endl;
}
};
class Work//总工作,客户与之打交道
{
private:
Sub_Work1 w1;
Sub_Work2 w2;
Sub_Work3 w3;
Sub_Work4 w4;
public:
void Work1()//总工作1
{
w1.Working1();
w3.Working3();
}
void Work2()//总工作2
{
w2.Working2();
w3.Working3();
w4.Working4();
}
};
int main()//client程序
{
Work w;
/*******总工作1******/
cout << "执行总工作1的步骤:" << endl;
w.Work1();
/*******总工作2******/
cout << endl << "执行总工作2的步骤:" << endl;
w.Work2();
system("pause");
return 0;
}
结果: