【设计模式】外观模式

 

 

/************************************************************************ 设计模式 外观模式 外观模式:有若干子系统,这些子系统提供提供了若干功能,如果要完成某个操作, 需要由各个子系统的全部或若干功能组成,那就需要类似的代码: 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; }

 

 

 

执行结果:

 

 

 

你可能感兴趣的:(设计模式)