文章目录
前言
今天复习了外观模式,不知道是不是最近一直都在复习设计模式的缘故,感觉很多模式都有很多相似之处,比如今天的外观模式,感觉和之前的中介者模式有点类似,都是从众多对象间解耦合,避免复杂的对象间通信,直接和一个统一的第三方对象通信即可。
1. 外观模式的理解
外观模式,个人理解,就是对复杂多样的多个对象的一种封装,客户端直接和这个封装类进行通信,该类内部负责进行相应的处理,对客户端而言,只需要了解这一封装类即可,不需要知道该封装类内部具体包含了多少对象,以及内部是如何运作的,实现了解耦合。就如同我们理财中的买基金一样,基金里包含了不同类型的理财产品,比如不同类型的股票,国债,…。如果我们自己来买这些不同类型的理财产品,需要足够的知识才有可能赚到钱,但是往往我们没有那么多时间和精力来学习这些专业知识。这里,基金就是这个封装类(外观类),由专业的基金经理帮助我们买不同类型的理财产品(复杂多样的对象),这样既降低了风险也不需要我们有很专业的知识,多好!
外观模式的定义与类图(引用《大话设计模式》)如下所示:
在理财的例子中,购买基金的人就是Client, 基金就是Facade类, 不同类型的理财产品就对应不同的SubSustemOne, SubSystemTwo, …。
2. C++实现外观模式
这里使用C++实现上述理财产品的例子,类图(引用《大话设计模式》)如下:
C++代码:
#include <iostream>
#include <memory>
//*******************Facade Pattern*******************
class Stock1
{
public:
void Buy()
{
std::cout << "Buy Stock1..." << std::endl;
}
void Sell()
{
std::cout << "Sell Stock1..." << std::endl;
}
};
class Stock2
{
public:
void