設計模式筆記(13)—代理模式(結構型)

來源:互聯網
上載者:User
文章目錄
  • Gof定義
  • 動機
  • Proxy模式的應用情境
  • Proxy模式的幾個要點
Gof定義

為其他對象提供一種代理以控制對這個對象的訪問。

動機

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

Subject:該類中定義了一些RealSubject和Proxy中共有的方法。

RealSubject:這個類是Proxy所要代理的實體類,用戶端只和Proxy互動。

代碼實現:

/// <summary>/// 公用介面/// </summary>interface ISubject{    void Request();}/// <summary>/// 被代理的類/// </summary>public class RealSubject : ISubject{    public void Request()    {        Console.WriteLine("被代理類的請求");    }}/// <summary>/// 代理類/// </summary>public class Proxy : ISubject{    RealSubject realSubject=new RealSubject();    public void Request()    {        realSubject.Request();    }}/// <summary>/// 客戶代碼/// </summary>/// <param name="args"></param>static void Main(string[] args){    Proxy proxy = new Proxy();    proxy.Request();}

 

上面的代碼非常簡單,在用戶端使用的是Proxy類,其實調用的是RealSubject類中的方法,起到了代理的目的。

Proxy模式的應用情境

遠程代理,也就是為一個對象在不同的地址空間提供局部代表。這樣可以隱藏一個對象存在不同地址空間的事實。(net中的webservice)

虛擬代理,根據需要建立開銷很大的對象。通過他來存放執行個體化需要很長時間的真實對象。

安全代理,用來控制真實對象訪問時的許可權。

智能指引,指當調用這是對象時,代理處理另外一些事情。

[以上四點摘自《大話設計模式》]

Proxy模式的幾個要點

“增加一層間接層”是軟體系統中對許多複雜問題的一種常見解決方案。在物件導向系統中,直接使用某些對象會帶來很多問題,作為間接層的proxy對象便是解決這一問題的常用手段。

具體proxy設計模式的實現方法、實現粒度都相差很大,有些可能對單個對象做細粒度的控制,如copy-on-write技術,有些可能對組件模組提供抽象代理層,在架構層次對對象做proxy。

Proxy並不一定要求保持介面的一致性,只要能夠實現間接控制,有時候損及一些透明性是可以接受的。

返回開篇(索引)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.