外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
三个阶段的不同使用:
设计初期阶段,应该要有意识的将不同的两层分离;
开发阶段,子系统往往因为不断的重构演化而变得越来越复杂;增加外观可以提供一个简单的接口,减少它们之间的依赖;
在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展。
适用于为一个复杂的子系统提供一个简单的接口,或提高子系统的独立性,在高层接口中为每一个子系统定义每一层的入口。
优点:简单易用,低耦合,层次性好。
缺点:若高层接口复杂或不合理时,会使系统变得复杂。
代码实现:
#include <iostream>
using namespace std;
class Stock1
{
public:
void Sell()
{
cout << "股票1卖出" << endl;
}
void Buy()
{
cout << "股票1买入" << endl;
}
};
class Stock2
{
public:
void Sell()
{
cout << "股票2卖出" << endl;
}
void Buy()
{
cout << "股票2买入" << endl;
}
};
class Stock3
{
public:
void Sell()
{
cout << "股票3卖出" << endl;
}
void Buy()
{
cout << "股票3买入" << endl;
}
};
class NationalDebt
{
public:
void Sell()
{
cout << "国债卖出" << endl;
}
void Buy()
{
cout << "国债买入" << endl;
}
};
class Realty
{
public:
void Sell()
{
cout << "房地产卖出" << endl;
}
void Buy()
{
cout << "房地产买入" << endl;
}
};
class Fund
{
public:
Fund()
{
gu1 = new Stock1();
gu2 = new Stock2();
gu3 = new Stock3();
nd = new NationalDebt();
rt = new Realty();
}
~Fund()
{
delete rt;
delete nd;
delete gu3;
delete gu2;
delete gu1;
}
void BuyFund()
{
gu1->Buy();
gu2->Buy();
gu3->Buy();
nd->Buy();
rt->Buy();
}
void SellFund()
{
gu1->Sell();
gu2->Sell();
gu3->Sell();
nd->Sell();
rt->Sell();
}
private:
Stock1* gu1;
Stock2* gu2;
Stock3* gu3;
NationalDebt* nd;
Realty* rt;
};
int main()
{
Fund* jijin = new Fund();
jijin->BuyFund();
jijin->SellFund();
jijin->~Fund();
return 0;
}