github地址:https://github.com/lining91/FacadedPattern
外觀模式比較簡單,但是使用比較頻繁。
外觀模式定義:
爲子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
外觀模式提供子系統的一個簡便的接口,將客戶從組建的子系統中解耦,客戶不需要知道具體的實現方法,方便客戶的使用該子系統。
使用條件:
在設計初期階段,應該有意識的將不同的兩個層分離。你如經典的三層架構,就需要考慮在數據訪問層和業務邏輯層、業務邏輯層和表示層的層與層之間建立外觀Façade,這樣可以爲複雜的子系統提供一個簡單的接口,使得耦合度大大降低。
在開發階段,子系統往往因爲不斷的重構演化而變得越來越複雜,增加外觀Façade可以提供一個簡單的接口,減少它們之間的依賴。
在維護一個遺留的大型系統時,可能這個系統已經非常難以維護和擴展了。這時候可以爲新系統開發一個外觀Façade類,來提供設計粗糙或高度複雜的遺留代碼的比較清晰簡單的接口,讓新系統與Façade對象交互,Façade與遺留代碼交互所有複雜的工作。
問題描述:
購買基金,其實是購買的一些列股票,國債等的組合。實現購買,出售基金的列子。
代碼如下:
FacadePattern.h文件中
// 外觀模式
// 股票類
class CStock{
public:
void Sell() { cout << " 出售股票! "<< endl; }
void Buy() { cout << " 購買股票! " << endl; }
};
// 國債類
class CNationalDebt{
public:
void Sell() { cout << " 出售國債! " << endl; }
void Buy() { cout << " 購買國債! " << endl; }
};
// 房地產類
class CRealty{
public:
void Sell() { cout << " 出售房地產! " << endl; }
void Buy() { cout << " 購買房地產!" << endl; }
};
class CFacade{
public:
CFacade()
{
pStock = new CStock();
pNationalDebt = new CNationalDebt();
pRealty = new CRealty();
}
~CFacade()
{
delete pStock;
delete pNationalDebt;
delete pRealty;
}
void Buy()
{
pStock->Buy();
pNationalDebt->Buy();
pRealty->Buy();
}
void Sell()
{
pStock->Sell();
pNationalDebt->Sell();
pRealty->Sell();
}
public:
CStock* pStock;
CNationalDebt* pNationalDebt;
CRealty* pRealty;
};
main.cpp文件中
#include <iostream>
using namespace std;
#include "FacadePattern.h"
void main()
{
CFacade* pPerson = new CFacade();
if ( pPerson == NULL )
return;
pPerson->Buy();
pPerson->Sell();
delete pPerson;
pPerson = NULL;
system("pause");
return;
}
運行結果如下: