【设计模式】外观模式
/************************************************************************
设计模式
外观模式
外观模式:有若干子系统,这些子系统提供提供了若干功能,如果要完成某个操作,
需要由各个子系统的全部或若干功能组成,那就需要类似的代码:
class Subsystem1
{
void function1_1();
void function1_2();
}
class Subsystem2
{
void function2_1();
void function2_2();
}
calss Subsystem3
{
void function3_1();
void functoin3_2();
}
要完成一个操作Operate1,需要如下:
操作1:Operate1
function1_1();
function3_2();
等等, 所以当有若干个操作和若干个排列组合时,就需要在客户度写多次,当有
子系统扩展和函数名更改时,就需要在每次用到的地方全部更改;这样耦合度极高,
这时就可以使用【外观模式】
外观模式提供了一系列接口,在这些接口内部对各个子系统的功能进行了排列组合的
调用,客户端在使用时直接使用外观模式提供的接口接口,客户端并不知道外观模式
内部封装了哪些操作,各个子系统也不知道外观类的存在,外观类需要了解各个子系统
的很多细节。
感觉外观模式和代理模式有点像呢?
************************************************************************/
/************************************************************************
这里我们以这样一个例子来说明,这也是【大话设计模式】里小菜和大鸟提到的
例子
客户通过基金公司购买基金,基金公司通过专业的操作,包括投资股票等投资项目
完成升值,为客户赚钱,基金公司赚取管理费。
这里的基金公司就是一个外观类,其赚钱的手段封装了很多细节的操作,对客户
来说,他只通过基金公司打交道来来购买 / 赎回自己的钱。
************************************************************************/
三个类,【股票】类 和 【投资】类相当于两个基金组织可以操作的两个子系统,【基金】类相当于【外观】,其内部的收入(Shouru()) 和 支出(Zhichu())操作封装了【股票】类和【投资】类的操作。
客户并不知道基金组织怎么用钱,对客户来说只有【基金】类提供给他的收入和之处接口。
【股票】类 和 【外观】类也并不知道有【基金】类的存在。
//【股票】类
class CStock
{
public:
CStock();
virtual ~CStock();
void Buy(); //买
void Sell(); //卖
};
CStock::CStock(){cout << "进入股票市场"<<endl;}
CStock::~CStock(){}
void CStock::Buy(){cout << "买入股票"<<endl;}
void CStock::Sell(){cout << "卖出股票"<<endl;}
//【投资】类
class CInvest
{
public:
CInvest();
virtual ~CInvest();
void Invest(); //投资
void Benifite(); //获利
};
CInvest::CInvest(){cout << "进行资本市场"<<endl;}
CInvest::~CInvest(){}
void CInvest::Invest(){cout << "进行投资"<<endl;}
void CInvest::Benifite(){cout<< "投资获利"<<endl;}
//【基金】类,即外观类
class CFund
{
public:
CFund();
virtual ~CFund();
void Zhichu();
void Shouru();
CStock* m_ptrStock;
CInvest* m_ptrInvest;
};
CFund::CFund()
{
cout<<"基金组织开始运作:"<<endl;
m_ptrStock = new CStock();
m_ptrInvest = new CInvest();
cout << endl;
}
CFund::~CFund(){}
void CFund::Zhichu()
{
cout << "支出操作:"<<endl;
m_ptrStock->Buy();
m_ptrInvest->Invest();
cout<<endl<<endl;
}
void CFund::Shouru()
{
cout << "收入操作:"<<endl;
m_ptrStock->Sell();
m_ptrInvest->Benifite();
cout<<endl;
}
客户端代码
int _tmain(int argc, _TCHAR* argv[])
{
CFund* pFunc = new CFund();
pFunc->Zhichu();
pFunc->Shouru();
return 0;
}
执行结果:
**********************技术交流请 email:cuihao0532#163.com 欢迎转载,转载请注明出处!***************************** 如果对本文满意请扫描文章左侧【二维码添加微信】获取更多好玩、有趣、有益、有营养的料,
你我共同成长!Y(^_^)Y