程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 設計模式C++描述----14.外觀(Facade)模式

設計模式C++描述----14.外觀(Facade)模式

編輯:C++入門知識

一. 舉例說明

還以我以前做的文件系統(FileSys)為例:

文件系統是一個獨立的系統,它提供一套核心的文件操作。

除了文件系統,還有四個子系統,分別是殺毒子系統(KillVirus),壓縮子系統(ZipFile),加密子系統(EncrypeFile)和刻錄子系統(BurnCD),這四個子系統相互獨立,但又可以做為主系統功能的一部分。

假設客戶需要我這個文件系統有兩種執行模式,一種是完全模式,一種是簡單模式。

完全模式,要求殺毒子,壓縮,加密和刻錄功能都有。
簡單模式,要求只要有殺毒,刻錄就行了。

第一種設計:

文件系統自己管理所有的子系統,並實現客戶的需求。

\

 

最開始的話,我們是按上面的結構來設計的,這個文件系統(FileSys)就要自己管理和組織上面的四個子系統。問題是子系統變化比較多,特別是重構之後,接口也變了,這時也要相應的修改這個文件系統。最麻煩的是,有時一個子系統要分離出好多小類,這對子系統是好事,但是對FileSys來說,調用越來越復雜和困難了。


這種設計的問題是:文件系統和子系統耦合性太高了!

第二種設計:


後來我們獨立出一個中間層,由中間層來統一管理這些子系統,並對外提供相對簡單的接口,使它們之間減少依賴。

\

代碼實現:
[cpp] view plaincopyprint?//殺毒  
class KillVirus   
{   
public:   
    void Operation1() { cout<<"殺毒"<<endl; }   
}; 
 
//壓縮  
class ZipFile 

public: 
    void Operation2() { cout<<"壓縮"<<endl; } 
}; 
 
//加密  
class EncryptFile   

public: 
    void Operation3() { cout<<"加密"<<endl; }   
}; 
 
//刻錄  
class BurnCD 
{   
public: 
    void Operation4() { cout<<"刻錄"<<endl;}   
}; 
 
//高層接口  
class OperatorWapper 
{   
public: 
    //完全功能  
    void MethodA()    
    { 
        KillVirus kill; 
        ZipFile zip; 
        EncryptFile encrypt; 
        BurnCD burn; 
 
        kill.Operation1(); 
        zip.Operation2(); 
        encrypt.Operation3(); 
        burn.Operation4(); 
    } 
 
    //簡單功能  
    void MethodB()    
    { 
        KillVirus kill; 
        BurnCD burn; 
 
        kill.Operation1(); 
        burn.Operation4(); 
    } 
}; 
 
//測試代碼  
int main()   
{   
    OperatorWapper op; 
 
    op.MethodA();//完全功能  
 
    op.MethodB();//簡單功能  
 
    return 0;   

//殺毒
class KillVirus 

public: 
    void Operation1() { cout<<"殺毒"<<endl; } 
};

//壓縮
class ZipFile
{
public:
    void Operation2() { cout<<"壓縮"<<endl; }
};

//加密
class EncryptFile 
{
public:
    void Operation3() { cout<<"加密"<<endl; } 
};

//刻錄
class BurnCD

public:
    void Operation4() { cout<<"刻錄"<<endl;} 
};

//高層接口
class OperatorWapper

public:
    //完全功能
    void MethodA()  
    {
        KillVirus kill;
        ZipFile zip;
        EncryptFile encrypt;
        BurnCD burn;

        kill.Operation1();
        zip.Operation2();
        encrypt.Operation3();
        burn.Operation4();
    }

    //簡單功能
    void MethodB()  
    {
        KillVirus kill;
        BurnCD burn;

        kill.Operation1();
        burn.Operation4();
    }
};

//測試代碼
int main() 

    OperatorWapper op;

    op.MethodA();//完全功能

    op.MethodB();//簡單功能

    return 0; 
}
二. 外觀模式

定義:為子系統中的一組接口提供一個一致的界面, 外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

 \


簡單的說,就是分層的概念。

說明:


1. 在設計初期,應該有意識的將不同層分離,比如常用的三層架構,就是考慮在數據訪問層,業務邏輯層與表示層之間,建立Facade,使復雜的子系統提供一個簡單的接口,降低耦合性。

2. 在開發階段,子系統往往因為不斷的重構而變的越來越復雜,增加外觀Facade可以提供一個簡單的接口,減少它們之間的依賴。


3. 在維護階段,可能這個系統已經非常難以維護和擴展了,此時你可以為新系統開發一個外觀類,來提供設計粗糙或高度復雜的遺留代碼的比較清晰簡單的接口,讓新系統與Facade對象交互,Facade與遺留代碼交互所有復雜的工作。

 

 

作者 lwbeyond

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved