您的位置:首页 > 其它

设计模式:12 外观模式

2015-08-13 11:10 225 查看
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口。这个接口使得子系统更加容易使用。



Façade:外观类,知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象

Subsystem Classes:子系统类几何,实现子系统的功能,处理Façade对象指派的任务,子类中没有对Façade对象的引用。



何时使用:

设计初期,将两个层分离,层与层之间建立外观Façade

开发阶段,子系统因为重构而复杂,增加外观Façade提供简单接口,减少依赖

维护遗留的大型系统时,为新系统开发外观Façade类,新系统与Façade对象交互,Façade与遗留代码交互复杂工作。





main.cpp

#include <iostream>
#include <stdlib.h>
#include "Facade.h"

using namespace std;

void process()
{
	Facade facade;
	facade.methodA();
	facade.methodB();
}

int main(int argc,char* argv[])
{
	process();
	system("pause");
	return 0;
}


Facade.h

#ifndef FACADE_H
#define FACADE_H
#include <memory>
#include "SubSystemOne.h"
class Facade
{
public:
	Facade(void);
	~Facade(void);
	void methodA();
	void methodB();
public:
	//关键:外观类聚合多个子系统类,向外提供简单接口
	std::shared_ptr<SubSystemOne> _ptrSubSystem1;
	std::shared_ptr<SubSystemTwo> _ptrSubSystem2;
	std::shared_ptr<SubSystemThree> _ptrSubSystem3;
	std::shared_ptr<SubSystemFour> _ptrSubSystem4;
};
#endif


Facade.cpp

#include "Facade.h"
#include <iostream>

using namespace std;

Facade::Facade(void)
{
	_ptrSubSystem1.reset(new SubSystemOne);
	_ptrSubSystem2.reset(new SubSystemTwo);
	_ptrSubSystem3.reset(new SubSystemThree);
	_ptrSubSystem4.reset(new SubSystemFour);
}

Facade::~Facade(void)
{
}

void Facade::methodA()
{
	cout << "方法组A:" << endl;
	_ptrSubSystem1->methodOne();
	_ptrSubSystem2->methodTwo();
	_ptrSubSystem4->methodFour();
}

void Facade::methodB()
{
	cout << "方法组B:" << endl;
	_ptrSubSystem2->methodTwo();
	_ptrSubSystem3->methodThree();
}


SubsystemOne.h

#ifndef SUBSYSTEMONE_H
#define SUBSYSTEMONE_H
class SubSystemOne
{
public:
	SubSystemOne(void);
	~SubSystemOne(void);
	void methodOne();
};

class SubSystemTwo
{
public:
	SubSystemTwo(void);
	~SubSystemTwo(void);
	void methodTwo();
};

class SubSystemThree
{
public:
	SubSystemThree(void);
	~SubSystemThree(void);
	void methodThree();
};

class SubSystemFour
{
public:
	SubSystemFour(void);
	~SubSystemFour(void);
	void methodFour();
};
#endif


SubSystemOne.cpp

#include "SubSystemOne.h"
#include <iostream>

using namespace std;

SubSystemOne::SubSystemOne(void)
{
}

SubSystemOne::~SubSystemOne(void)
{
}

void SubSystemOne::methodOne()
{
	cout << "子系统方法1" << endl;
}

SubSystemTwo::SubSystemTwo(void)
{
}

SubSystemTwo::~SubSystemTwo(void)
{
}

void SubSystemTwo::methodTwo()
{
	cout << "子系统方法2" << endl;
}

SubSystemThree::SubSystemThree(void)
{
}

SubSystemThree::~SubSystemThree(void)
{
}

void SubSystemThree::methodThree()
{
	cout << "子系统方法3" << endl;
}

SubSystemFour::SubSystemFour(void)
{
}

SubSystemFour::~SubSystemFour(void)
{
}

void SubSystemFour::methodFour()
{
	cout << "子系统方法4" << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: