設計模式筆記—13_Proxy代理模式

Proxy代理模式是一種“接口隔離”模式

  • 在組件構建過程中,某些接口之間直接的依賴常常會帶來很多問題、甚至根本無法實現。採用一層間接(穩定)接口,來隔離本來互相緊密關聯的接口是一種常見的解決方案

動機

  • 在面向對象系統中,有些對象由於某種原因(比如對象創建的開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問等),直接訪問會給使用者、或者系統結構帶來很多麻煩
  • 如何在不失去透明操作對象的同時來管理/控制這些對象特有的複雜性?增加一層間接層是軟件開發中常見的解決方式

定義

  • 爲其他對象提供一種代理以控制(隔離、使用接口)對這個對象的訪問

結構

在這裏插入圖片描述

代碼對比

未使用代理模式Client.cpp

class ISubject{
public:
    virtual void process();
};


class RealSubject: public ISubject{
public:
    virtual void process(){
        //....
    }
};

class ClientApp{
    
    ISubject* subject;
    
public:
    
    ClientApp(){
        subject=new RealSubject();
    }
    
    void DoTask(){
        //...
        subject->process();
        
        //....
    }
};

Proxy.cpp

class ISubject{
public:
    virtual void process();
};


//Proxy的設計
class SubjectProxy: public ISubject{
    
    
public:
    virtual void process(){
        //對RealSubject的一種間接訪問
        //....
    }
};

class ClientApp{
    
    ISubject* subject;
    
public:
    
    ClientApp(){
        subject=new SubjectProxy();
    }
    
    void DoTask(){
        //...
        subject->process();
        
        //....
    }
};

對比

  • Proxy針對RealSubject實現了間接訪問,將其包裝起來,避免了直接調用Subject
  • Proxy通常需要很多層面的配合,比較複雜

要點總結

  • “增加一層間接層”是軟件系統中對許多複雜問題的一種常見解決方法。在面向對象的系統中,直接使用某些對象會帶來很多問題,作爲間接層的proxy對象便是解決這一問題的常用手段
  • 具體proxy設計模式的實現方法、實現粒度都相差很大,有些可能對單個對象做細粒度的控制,如copy-on-write技術,有些可能對組件模塊提供抽象代理層,在架構蹭喫對對象做proxy
  • Proxy並不一定要求保持接口完整的一致性,只要能夠實現間接控制,有時候損失一些透明性是可以接受的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章