设计模式学习(十) 外观模式 Facade

1.外观模式的定义与类图

外观模式的理解很简单,其就是为一组有类似功能的类群,比如类库、子系统等等,提供一个一致的简单界面(类比于一套外用接口也可以),主要是为了让子系统更容易使用。
具体的类图如下:
外观模式类图
由图可见外观模式的类图十分简单粗暴,通过客户端Client调用外观模式Facade的类实现子系统的操作。而外观模式Facade中将各个子系统作为其关联对象(成员变量),在其中建立不同的函数来调用单个或多个子系统来实现对应的操作。这就实现了客户端与实际功能类的分离,两者均通过中间类外观模式Facade来连接,在需要修改/增删功能时能够有效得降低代码工作量。

2.外观模式的代码实现

本例中使用了外观模式实现选择购买股票Share,期货Futures以及债券Bond的三个实现函数,客户端通过调用Facade来实现自己的期望操作。

#include <iostream>
#include <string>
using namespace std;

class Share
{
public:
	void Buy()
	{
		cout << "Buy the Share" << endl;
	}
};

class Futures
{
public:
	void Buy()
	{
		cout << "Buy the Futures" << endl;
	}
};

class Bond
{
public:
	void Buy()
	{
		cout << "Buy the Bond" << endl;
	}
};

class Facade
{
public:
	Facade(string &user)
	{
		m_user = user;
		m_share = new Share;
		m_futures = new Futures;
		m_bond = new Bond;
	}
	void BuyShare()
	{
		cout << m_user << " ";
		m_share->Buy();
	}
	void BuyFutures()
	{
		cout << m_user << " ";
		m_futures->Buy();
	}
	void BuyBond()
	{
		cout << m_user << " ";
		m_bond->Buy();
	}
	~Facade()
	{
		delete m_share;
		delete m_futures;
		delete m_bond;
	}
private:
	string m_user;
	Share* m_share;
	Futures* m_futures;
	Bond *m_bond;
};

int main()
{
	string user_Mike = "Mike";
	Facade* facade = new Facade(user_Mike);
	facade->BuyBond();
	facade->BuyFutures();
	facade->BuyShare();

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方寸间沧海桑田

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值