設計模式——外觀模式

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;
}

運行結果如下:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章