1、subsystemone.h
#ifndef SUBSYSTEMONE_H
#define SUBSYSTEMONE_H
#include<iostream>
using namespace std;
class SubSystemOne //Subsystem,子系统一,内有两个方法
{
public:
SubSystemOne(){}
void MethodOne()
{
cout<<"use SubSystemOne->MethodOne"<<endl;
}
void MethodTwo(){
cout<<"use SubSystemOne->MethodTwo"<<endl;
}
};
#endif // SUBSYSTEMONE_H
2、subsystemtwo.h
#ifndef SUBSYSTEMTWO_H
#define SUBSYSTEMTWO_H
#include<iostream>
using namespace std;
class SubSystemTwo //Subsystem,子系统二,内有两个方法
{
public:
SubSystemTwo(){}
void MethodOne()
{
cout<<"use SubSystemTwo->MethodOne"<<endl;
}
void MethodTwo()
{
cout<<"sue SubSystemTwo->MethodTwo"<<endl;
}
};
#endif // SUBSYSTEMTWO_H
3、subsystemthree.h
#ifndef SUBSYSTEMTHREE_H
#define SUBSYSTEMTHREE_H
#include<iostream>
using namespace std;
class SubSystemThree //Subsystem,子系统三,内有两个方法
{
public:
SubSystemThree(){}
void MethodOne()
{
cout<<"use SubSystemThree->MethodOne"<<endl;
}
void MethodTwo()
{
cout<<"use SubSystemThree->MethodTwo"<<endl;
};
};
#endif // SUBSYSTEMTHREE_H
4-1、facade.h
#ifndef FACADE_H
#define FACADE_H
#include "subsystemone.h"
#include "subsystemtwo.h"
#include "subsystemthree.h"
class Facade //Facade类,外观的类
{
public:
Facade();
~Facade();
void MethodOne(); //更高层的统一接口,用:第一子系统的第一方法,第一子系统的第二方法,第二子系统的第一方法
void MethodTwo(); //更高层的统一接口,用:第二子系统的第二方法,第三子系统的第一方法,第三子系统的第二方法
private:
SubSystemOne *subSystemOne;
SubSystemTwo *subSystemTwo;
SubSystemThree *subSystemThree;
};
#endif // FACADE_H
4-2、facade.cpp
#include "facade.h"
Facade::Facade()
{
subSystemOne = new SubSystemOne();
subSystemTwo = new SubSystemTwo();
subSystemThree = new SubSystemThree();
}
Facade::~Facade()
{
delete subSystemOne;
delete subSystemTwo;
delete subSystemThree;
}
void Facade::MethodOne() //更高层的统一接口,用:第一子系统的第一方法,第一子系统的第二方法,第二子系统的第一方法
{
cout<<"Facade MethodOne:"<<endl;
subSystemOne->MethodOne();
subSystemOne->MethodTwo();
subSystemTwo->MethodOne();
}
void Facade::MethodTwo() //更高层的统一接口,用:第二子系统的第二方法,第三子系统的第一方法,第三子系统的第二方法
{
cout<<"Facade MethodTwo:"<<endl;
subSystemTwo->MethodTwo();
subSystemThree->MethodOne();
subSystemThree->MethodTwo();
}
5、main.cpp
/*
作者:jhluroom弹 QQ:454676244 MSN:jhlu0815@hotmail.com
开发IDE:qt creater
开发环境:QT C++
参考网站:神秘果:http://www.shenmiguo.com/
定义:
为子系统中的一组接口提供一个一致的界面,外观(Facade)模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
理解:
1.Facade提供一个高层接口,将客户的请求代理给适合的子系统(Subsystem)对象,Facade知道子系统的哪些对象来处理请求。
2.Subsystem是一系列类的集合,处理Facade指派的任务。Subsystem不知道Facade的信息
要点:
1.一个复杂的系统包括若干个子系统,Facade模式为复杂子系统提供一个简单而统一的接口。
譬如编译系统包括代码扫描、语法分析、代码生成等流程,每一个流程可以成为一个子系统。
客户编译代码并不想知道具体的细节流程,Facade模式封装一套标准编译流程,就屏蔽了编译的具体流程,简化了客户调用。
2.提高子系统的独立性和可移植性。客户程序与抽象类的实现部分之间存在着很大的依赖性。
引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
3.当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。
如果子系统之间是相互依赖的,你可以让它们仅通过Facade进行通讯,从而简化了它们之间的依赖关系。
应用:
假如有三个子系统,每个子系统有二个方法;客户要做二件事情,每一件事情,可能调用这三个子系统的任一一个组合(可能调用
第一个子系统;同时调用第一个、第二个子系统;同时调用第一个子系统、第二个子系统、第三个子系统;等)。并且,在调用每个
子系统时,可以调用这个子系统中的第一个方法,也可以调用这个子系统的第二个方法,也可以同时调用这个子系统的两个方法。
如下源码所示:
以上文字说明,从网上整理而来,有可能部分与其他同仁相同,请谅解,希望我们能够共同交流,谢谢!
*/
#include <QtCore/QCoreApplication>
#include "facade.h"
int main(int argc, char *argv[])
{
cout << "=== jhluroom start ========" << endl;
Facade facadeMethodOne;
facadeMethodOne.MethodOne();
cout << endl;
Facade facadeMethodTwo;
facadeMethodTwo.MethodTwo();
cout << "=== jhluroom finish _^_ ===" << endl;
}
运行结果:
=== jhluroom start ========
Facade MethodOne:
use SubSystemOne->MethodOne
use SubSystemOne->MethodTwo
use SubSystemTwo->MethodOne
Facade MethodTwo:
sue SubSystemTwo->MethodTwo
use SubSystemThree->MethodOne
use SubSystemThree->MethodTwo
=== jhluroom finish _^_ ===