熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

老生常談:代理模式

2013-11-13 10:32:06  來源: .NET編程 
  在上一篇你會在C#的類庫中添加web service嗎? 我談到了web service的應用本人一直學習設計模式而web service就是代理模式的一種特別經典的應用

  名詞解釋
            代理代理服務器即Proxy服務器在互聯網上的完成跑腿服務當你在浏覽器中設置了某個Proxy服務器之後由你的浏覽器所發出的任何要求都會被送到Proxy服務器上去由這台Proxy服務器代為處理     

  現實中真實例子:

  在工廠和銷售商之間也是這種類似的代理關系工廠所生產的產品要想銷售出去首先必須要有客戶但是工廠是不希望這樣的直接客戶直接到工廠來買產品原因可想而之我這裡列了幾項

  第一工廠並沒有那麼多時間去接待數量眾多的客戶
        第二工廠並不一定具有一個非常出色銷售團隊
       這樣工廠就非常希望找到一個代理來幫工廠完成銷售任務工廠把產品交給代理代理負責打廣告銷售售後服務等等在電腦城中當我們diy電腦的時候商家會到不同的硬件代理商那邊去拿相關的配件例如inter的cpu電腦城中有很多商家做為intel的代理他們都賣intel的cpu代理商負責銷售cpu 發放質保卡等在某種程度上來說代理就代表了intel(部分權利)

  代理商和工廠之間有一個共同的特點他們都擁有intel的cpu他們之間的利潤成正比說的抽象點就是他們之間具備共同的接口客戶可以和代理商溝通特殊情況下可以直接和工廠溝通例如代理商找不到了產品壞了此時要修這時就要直接訪問工廠了說的抽象點就是客戶端可以通過代理來訪問真實的類也可以通過代理直接訪問真實類

  這樣就非常清晰的顯示出代理模式的結構元素
       抽象角色代理和真實類共同接口
真實角色代理角色所代表的真實對象 
:  代理角色它的內部含真實角色的引用它可以訪問真實角色中的任何公有方法

  代理模式的類圖:

        

  代理模式的作用
           在某些情況下客戶不想或者不能夠直接引用一個對象而代理對象可以在客戶端和目標對象之間起到中介的作用例如在web application中添加web service此時就會生成一個代理這個代理負責訪問遠程服務生成真實代理對象借助客戶端調用

  web service生成代碼如下:SettingsDesignercs從中可以看出它完成了連接遠程服務的功能至於詳細的原理本人不才望各位指點


//
// <autogenerated>
//     此代碼由工具生成
//     運行庫版本:
//
//     對此文件的更改可能會導致不正確的行為並且如果
//     重新生成代碼這些更改將會丟失
// </autogenerated>
//

namespace MyWebServiceWebProperties {
     
    [global::SystemRuntimeCompilerServicesCompilerGeneratedAttribute()]
    [global::SystemCodeDomCompilerGeneratedCodeAttribute(MicrosoftVisualStudioEditorsSettingsDesignerSettingsSingleFileGenerator )]
    internal sealed partial class Settings : global::SystemConfigurationApplicationSettingsBase {
        
        private static Settings defaultInstance = ((Settings)(global::SystemConfigurationApplicationSettingsBaseSynchronized(new Settings())));
        
        public static Settings Default {
            get {
                return defaultInstance;
            }
        }
        
        [global::SystemConfigurationApplicationScopedSettingAttribute()]
        [global::SystemDiagnosticsDebuggerNonUserCodeAttribute()]
        [global::SystemConfigurationSpecialSettingAttribute(global::SystemConfigurationSpecialSettingWebServiceUrl)]
        [global::SystemConfigurationDefaultSettingValueAttribute()]
        public string MyWebService_Web_localhost_Service {
            get {
                return ((string)(this[MyWebService_Web_localhost_Service]));
            }
        }
    }
}
       代理模式在眾多模式中都非常眼熟在adapter中也有引用對象的存在在Decorator中也有引用對象它們的共同特點都是一個類包含另一個類的引用可以通過它訪問被引用對象所有公有方法但是它們之間又存在不同點無論是adaoter模式還是decoraor模式它們存在引用類之間都不必擁有共同的接口它們之間可以是完成不相關的對象 
      代理模式中的代理對象和真實對象之間無論訪問誰最終訪問的是同一對象即真實對象它們之間並沒有發生質的變化
       :adapter模式中存在的引用是在一個類中引用另一個類中的方法使其方法簽名發生變化是外表變了本質沒變
      decorator中存在的引用是在舊類的基礎了增加新的功能


From:http://tw.wingwit.com/Article/program/net/201311/13923.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.