设计模式——外观模式(C++实现)

外观模式

          隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。属于结构型模式。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

适用场景:

          1、当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。外观模式facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过提供的外观层。
          2、客户程序与抽象类的实现部分之间存在着很大的依赖性。引入外观模式facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
          3、当你需要构建一个层次结构的子系统时,使用外观模式facade定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过外观模式facade进行通讯,从而简化了它们之间的依赖关系。

采用菜鸟教程的例子,这里用C++实现

#include<iostream>

using namespace std;

//创建一个形状的抽象接口shape
class shape
{
public:
	shape() {};
	virtual ~shape() {};
	virtual void draw()=0;
};


//创建实现形状抽象接口的实体类rectangle
class rectangle :public shape
{
public:
	rectangle() {};
	~rectangle() {};
	void draw();
};

void rectangle::draw()
{
	cout << "rectangle::draw()" << endl;
}

//创建实现形状抽象接口的实体类square
class square :public shape
{
public:
	square() {};
	~square() {};
	void draw();
};

void square::draw()
{
	cout << "square::draw()" << endl;
}

//创建实现形状抽象接口的实体类circle
class circle :public shape
{
public:
	circle() {};
	~circle() {};
	void draw();
};

void circle::draw()
{
	cout << "circle::draw()" << endl;
}

//创建一个外观类。隐藏系统的复杂性,提供访问系统的接口
class shapemaker
{
public:
	shapemaker();
	~shapemaker();
	void drawcircle();
	void drawrectangle();
	void drawsquare();
private:
	shape *circlet;
	shape *rectanglet;
	shape *squaret;
};

shapemaker::shapemaker()
{
	circlet = (shape*)new circle();
	rectanglet = (shape*)new rectangle();
	squaret = (shape*)new square();
}
shapemaker::~shapemaker()
{
	delete circlet;
	circlet = NULL;

	delete rectanglet;
	rectanglet = NULL;

	delete squaret;
	squaret = NULL;
}
void shapemaker::drawcircle()
{
	circlet->draw();
}
void shapemaker::drawrectangle()
{
	rectanglet->draw();
}
void shapemaker::drawsquare()
{
	squaret->draw();
}


int main()
{
	shapemaker *shapemakert = new shapemaker();
	shapemakert->drawcircle();
	shapemakert->drawrectangle();
	shapemakert->drawsquare();
	delete shapemakert;
	shapemakert = NULL;
	system("pause");
	return 0;
}

在visual studio 2015上运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值