<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • C#設計模式中代理模式怎么用-創(chuàng)新互聯(lián)

            這篇文章將為大家詳細講解有關(guān)C#設計模式中代理模式怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

            創(chuàng)新互聯(lián)成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目網(wǎng)站設計、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元于田做網(wǎng)站,已為上家服務,為于田各地企業(yè)和個人服務,聯(lián)系電話:13518219792

            一、引言

            在軟件開發(fā)過程中,有些對象有時候會由于網(wǎng)絡或其他的障礙,以至于不能夠或者不能直接訪問到這些對象,如果直接訪問對象給系統(tǒng)帶來不必要的復雜性,這時候可以在客戶端和目標對象之間增加一層中間層,讓代理對象代替目標對象,然后客戶端只需要訪問代理對象,由代理對象去幫我們?nèi)フ埱竽繕藢ο蟛⒎祷亟Y(jié)果給客戶端,這樣的一個解決思路就是今天要介紹的代理模式。

            二、代理模式的詳細介紹

            代理模式按照使用目的可以分為以下幾種:

            • 遠程(Remote)代理:為一個位于不同的地址空間的對象提供一個局域代表對象。這個不同的地址空間可以是本電腦中,也可以在另一臺電腦中。最典型的例子就是——客戶端調(diào)用Web服務或WCF服務。

            • 虛擬(Virtual)代理:根據(jù)需要創(chuàng)建一個資源消耗較大的對象,使得對象只在需要時才會被真正創(chuàng)建。

            • Copy-on-Write代理:虛擬代理的一種,把復制(或者叫克?。┩涎拥街挥性诳蛻舳诵枰獣r,才真正采取行動。

            • 保護(Protect or Access)代理:控制一個對象的訪問,可以給不同的用戶提供不同級別的使用權(quán)限。

            • 防火墻(Firewall)代理:保護目標不讓惡意用戶接近。

            • 智能引用(Smart Reference)代理:當一個對象被引用時,提供一些額外的操作,比如將對此對象調(diào)用的次數(shù)記錄下來等。

            • Cache代理:為某一個目標操作的結(jié)果提供臨時的存儲空間,以便多個客戶端可以這些結(jié)果。

            在哦上面所有種類的代理模式中,虛擬代理、遠程代理、智能引用代理和保護代理較為常見的代理模式。下面讓我們具體看看代理模式的具體定義。

            2.1 定義

            代理模式——就是給某一個對象提供一個代理,并由代理對象控制對原對象的引用。在一些情況下,一個客戶不想或者不能直接引用一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。例如電腦桌面的快捷方式就是一個代理對象,快捷方式是它所引用的程序的一個代理。

            2.2 代理模式實現(xiàn)

            看完代理模式的描述之后,下面以一個生活中的例子來解釋下代理模式,在現(xiàn)實生活中,如果有同事出國或者朋友出國的情況下,我們經(jīng)常會拖這位朋友幫忙帶一些電子產(chǎn)品或化妝品等東西,這個場景中,出國的朋友就是一個代理,他(她)是他(她)朋友的一個代理,由于他朋友不能去國外買東西,他卻可以,所以朋友們都托他幫忙帶一些東西的。下面就以這個場景來實現(xiàn)下代理模式,具體代碼如下:

            // 客戶端調(diào)用
                class Client
                {
                    static void Main(string[] args)
                    {
                        // 創(chuàng)建一個代理對象并發(fā)出請求
                        Person proxy = new Friend();
                        proxy.BuyProduct();
                        Console.Read();
                    }
                }
                // 抽象主題角色
                public abstract class Person
                {
                    public abstract void BuyProduct();
                }
                //真實主題角色
                public class RealBuyPerson : Person
                {
                    public override void BuyProduct()
                    {
                        Console.WriteLine("幫我買一個IPhone和一臺蘋果電腦");
                    }
                }
                // 代理角色
                public class Friend:Person
                {
                    // 引用真實主題實例
                    RealBuyPerson realSubject;
                    public override void BuyProduct()
                    {
                        Console.WriteLine("通過代理類訪問真實實體對象的方法");
                        if (realSubject == null)
                        {
                            realSubject = new RealBuyPerson();
                        }
                        this.PreBuyProduct();
                        // 調(diào)用真實主題方法
                        realSubject.BuyProduct();
                        this.PostBuyProduct();
                    }
                    // 代理角色執(zhí)行的一些操作
                    public void PreBuyProduct()
                    {
                        // 可能不知一個朋友叫這位朋友帶東西,首先這位出國的朋友要對每一位朋友要帶的東西列一個清單等
                        Console.WriteLine("我怕弄糊涂了,需要列一張清單,張三:要帶相機,李四:要帶Iphone...........");
                    }
                                     
                    // 買完東西之后,代理角色需要針對每位朋友需要的對買來的東西進行分類
                    public void PostBuyProduct()
                    {
                        Console.WriteLine("終于買完了,現(xiàn)在要對東西分一下,相機是張三的;Iphone是李四的..........");
                    }
                }

            在上面的代碼中都有相應的注釋,這里也不多解釋了。

            2.3 代理模式的類圖結(jié)構(gòu)

            看完代理模式的實現(xiàn)之后,下面就以上面的例子來分析下代理模式的類圖結(jié)構(gòu)。具體的類圖如下所示:

            C#設計模式中代理模式怎么用

            在上面類圖中,代理模式所涉及的角色有三個:

            抽象主題角色(Person):聲明了真實主題和代理主題的公共接口,這樣一來在使用真實主題的任何地方都可以使用代理主題。

            代理主題角色(Friend):代理主題角色內(nèi)部含有對真實主題的引用,從而可以操作真實主題對象;代理主題角色負責在需要的時候創(chuàng)建真實主題對象;代理角色通常在將客戶端調(diào)用傳遞到真實主題之前或之后,都要執(zhí)行一些其他的操作,而不是單純地將調(diào)用傳遞給真實主題對象。例如這里的PreBuyProduct和PostBuyProduct方法就是代理主題角色所執(zhí)行的其他操作。

            真實主題角色(RealBuyPerson):定義了代理角色所代表的真是對象。

            附:在實際開發(fā)過程中,我們在客戶端添加服務引用的時候,在客戶程序中會添加一些額外的類,在客戶端生成的類扮演著代理主題角色,我們客戶端也是直接調(diào)用這些代理角色來訪問遠程服務提供的操作。這個是遠程代理的一個典型例子。

            三、代理模式的優(yōu)缺點

            全面分析完代理模式之后,讓我們看看這個模式的優(yōu)缺點:

            優(yōu)點:

            1. 代理模式能夠?qū)⒄{(diào)用用于真正被調(diào)用的對象隔離,在一定程度上降低了系統(tǒng)的耦合度;

            2. 代理對象在客戶端和目標對象之間起到一個中介的作用,這樣可以起到對目標對象的保護。代理對象可以在對目標對象發(fā)出請求之前進行一個額外的操作,例如權(quán)限檢查等。

            缺點:

            1. 由于在客戶端和真實主題之間增加了一個代理對象,所以會造成請求的處理速度變慢

            2. 實現(xiàn)代理類也需要額外的工作,從而增加了系統(tǒng)的實現(xiàn)復雜度。

            關(guān)于“C#設計模式中代理模式怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

            另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

            分享題目:C#設計模式中代理模式怎么用-創(chuàng)新互聯(lián)
            網(wǎng)站URL:http://www.jbt999.com/article12/cddpdc.html

            成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供云服務器、企業(yè)網(wǎng)站制作、網(wǎng)站策劃App開發(fā)、網(wǎng)站設計公司域名注冊

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

            h5響應式網(wǎng)站建設

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 熟女人妻人妻の视频 | 欧美性爱乱伦视频 | 久久真人视频 | 天天橾 | 香蕉视频网站在线看视频二 |