外观模式
前序
这回小菜同学和大鸟讨论起了关于股票的事情,小菜提到最近股市很火,不过他的同事一直在亏钱。而大鸟说道:“如果你的同事花钱去投资基金,则不会亏的这么厉害。基金将所有投资者的钱全部集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域。”
而个人进行投资股票,对股票的联系太多,反而不利于操作,这在软件中就称为耦合性过高。而有了基金之后,众多的用户只和基金打交道,关心基金的上涨和下跌就可以了,应此消除了过高的耦合性。
于是大鸟便让小菜将股民炒股票的代码写出来看看。
股民炒股票代码
#include <stdio.h>
// 股票1
class Stock1
{
public:
void Sell() // 卖股票
{
printf("股票1卖出\n");
}
void Buy() // 买股票
{
printf("股票1买入\n");
}
};
// 股票2
class Stock2
{
public:
void Sell() // 卖股票
{
printf("股票2卖出\n");
}
void Buy() // 买股票
{
printf("股票2买入\n");
}
};
// 股票3
class Stock3
{
public:
void Sell() // 卖股票
{
printf("股票3卖出\n");
}
void Buy() // 买股票
{
printf("股票3买入\n");
}
};
// 国债1
class NationalDebt1
{
public:
void Sell() // 卖国债
{
printf("国债卖出\n");
}
void Buy() // 买国债
{
printf("国债买入\n");
}
};
// 房地产1
class Realty1
{
public:
void Sell() // 卖房地产
{
printf("房地产卖出\n");
}
void Buy() // 买房地产
{
printf("房地产买入\n");
}
};
int main()
{
Stock1* gu1 = new Stock1();
Stock2* gu2 = new Stock2();
Stock3* gu3 = new Stock3();
NationalDebt1* nd1 = new NationalDebt1();
Realty1* rt1 = new Realty1();
gu1->Buy();
gu2->Buy();
gu3->Buy();
nd1->Buy();
rt1->Buy();
gu1->Sell();
gu2->Sell();
gu3->Sell();
nd1->Sell();
rt1->Sell();
delete gu1;
delete gu2;
delete gu3;
delete nd1;
delete rt1;
return 0;
}
大鸟看后答到:“很好,如果我们现在增加基金类,将如何做?”
外观模式
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
实现方式(UML类图)
![](/images/cppblog_com/lwch/Facade_001.png)
实现代码
#include <stdio.h>
// 股票1
class Stock1
{
public:
void Sell() // 卖股票
{
printf("股票1卖出\n");
}
void Buy() // 买股票
{
printf("股票1买入\n");
}
};
// 股票2
class Stock2
{
public:
void Sell() // 卖股票
{
printf("股票2卖出\n");
}
void Buy() // 买股票
{
printf("股票2买入\n");
}
};
// 股票3
class Stock3
{
public:
void Sell() // 卖股票
{
printf("股票3卖出\n");
}
void Buy() // 买股票
{
printf("股票3买入\n");
}
};
// 国债1
class NationalDebt1
{
public:
void Sell() // 卖国债
{
printf("国债卖出\n");
}
void Buy() // 买国债
{
printf("国债买入\n");
}
};
// 房地产1
class Realty1
{
public:
void Sell() // 卖房地产
{
printf("房地产卖出\n");
}
void Buy() // 买房地产
{
printf("房地产买入\n");
}
};
// 基金
class Fund
{
public:
Fund() : gu1(new Stock1()),gu2(new Stock2()),gu3(new Stock3()),nd1(new NationalDebt1()),rt1(new Realty1()){}
void BuyFund()
{
gu1->Buy();
gu2->Buy();
gu3->Buy();
nd1->Buy();
rt1->Buy();
}
void SellFund()
{
gu1->Sell();
gu2->Sell();
gu3->Sell();
nd1->Sell();
rt1->Sell();
}
protected:
Stock1* gu1;
Stock2* gu2;
Stock3* gu3;
NationalDebt1* nd1;
Realty1* rt1;
};
int main()
{
Fund jijin;
jijin.BuyFund(); // 购买基金
jijin.SellFund(); // 赎回基金
return 0;
}
运行结果
![](/images/cppblog_com/lwch/Facade_002.png)
所有文件打包下载
posted on 2011-05-26 17:12
lwch 阅读(1608)
评论(2) 编辑 收藏 引用 所属分类:
设计模式