上篇文章,介绍了《大话设计模式》的第10章——模板方法。
本篇,来介绍《大话设计模式》的第12章——外观模式。并通过C++代码实现实例代码的功能。
注:第11章介绍的是迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用
1 外观模式
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式的类图如下:
- Facade:外观类,对子系统进行管理,对接客户端。SubSystem:子系统类,实现子系统的功能,处理外观类指派的任务。
2 实例
背景:书中小故事,股市行情很火,小菜的一些同事在炒股票,但大多是刚入市的,什么都不懂,其中一个叫顾韵梅的同事,在大大好的牛市行情里,却连连亏损。哈,典型的新股民特征。还是要找懂行的人,基金经理。
题目:用代码的形式来实现自己操作股票以及基金经理操作股票。
2.1 版本一:自己操作股票
版本一的实现就是定义一些股票类,提供买入和卖出的接口,然后客户自己操作买入和卖出。
2.1.1 股票类
股票类的实现如下,这里以股票1、股票2和国债1进行示例:
// 股票1
class Stock1
{
public:
void Buy()
{
printf("股票1买入n");
}
void Sell()
{
printf("股票1卖出n");
}
};
// 股票2
class Stock2
{
public:
void Buy()
{
printf("股票2买入n");
}
void Sell()
{
printf("股票2卖出n");
}
};
// 国债1
class NationDebt1
{
public:
void Buy()
{
printf("国债1买入n");
}
void Sell()
{
printf("国债1卖出n");
}
};
2.1.2 主函数
首先,实例化对应的股票,
然后,就可以调用对应的买入和卖出的接口了。
int main()
{
Stock1 stock1;
Stock2 stock2;
NationDebt1 nationDebt1;
stock1.Buy();
stock2.Buy();
nationDebt1.Buy();
stock1.Sell();
stock2.Sell();
nationDebt1.Sell();
return 0;
}
代码运行效果如下:
2.2 版本二:基金经理操作股票
版本一的实现比较简单,是客户自己操作股票,对于新手股民,可能一顿操作猛如虎,一看收益二百五。如果通过购买基金,由基金经理来操作股票,收益结果可能不同。
修改后的代码如下:
// 基金
class Fund
{
public:
void Buy()
{
printf("基金操作买入:n");
m_stock1.Buy();
m_stock2.Buy();
m_nationDebt1.Buy();
}
void Sell()
{
printf("基金操作卖出:n");
m_stock1.Sell();
m_stock2.Sell();
m_nationDebt1.Sell();
}
private:
Stock1 m_stock1;
Stock2 m_stock2;
NationDebt1 m_nationDebt1;
};
int main()
{
Fund fund;
fund.Buy();
fund.Sell();
return 0;
}
运行效果如下:
总结
本篇介绍了设计模式中的外观模式,并通过购买股票和基金的实例,使用C++编程,来演示外观模式的使用。
文章推荐