中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

系統(tǒng)架構(gòu)技能之設(shè)計(jì)模式—代理模式

  一、上篇回顧

  很久沒(méi)有更新設(shè)計(jì)模式系列的文章了,有了很多熱心朋友的反饋,我決定繼續(xù)將這個(gè)系列趕快寫(xiě)完,最近由于過(guò)年了,有很多相關(guān)的事宜要做,所以沒(méi)有時(shí)間來(lái)寫(xiě),也是對(duì)大家的說(shuō)下抱歉,感覺(jué)寫(xiě)文章的時(shí)間越來(lái)越少了,不過(guò)我會(huì)努力,盡快將這個(gè)系列寫(xiě)完,與大家共勉,希望大家有什么意見(jiàn)或建議,都可以幫我提出來(lái),我好改進(jìn),謝謝!。

  本文主要是講述設(shè)計(jì)模式中的結(jié)構(gòu)性模式中的最后一個(gè)本系列講述的模式,也是經(jīng)常用到的模式,代理模式,由于目前我們?cè)诤芏嗟募夹g(shù)中都會(huì)用到這個(gè)代理模式,所以對(duì)我們來(lái)說(shuō),代理模式是必須掌握的模式之一。我們先來(lái)看看代理的思路及原理:       image

  通過(guò)上面的圖片,我們可以看到,通過(guò)增加代理來(lái)解耦A(yù)與C之間的調(diào)用,這樣可以封裝原來(lái)C調(diào)用A的一些相關(guān)細(xì)節(jié),轉(zhuǎn)換成C直接調(diào)用B中封裝后的代理方法,則等同于訪問(wèn)A。對(duì)于WebService的遠(yuǎn)程調(diào)用時(shí),如果我們使用添加Web引用的方式,那么WebService會(huì)為我們自動(dòng)生成代理類(lèi)的,這個(gè)我這里就不演示了,包括Castle中的AOP等實(shí)現(xiàn)方案都是基于動(dòng)態(tài)代理的機(jī)制來(lái)實(shí)現(xiàn),當(dāng)然思路都是這樣的,WCF中也有用到代理的思想。

  二、摘要

  前面我們講述了外觀模式中的關(guān)于動(dòng)態(tài)代理中的一些實(shí)現(xiàn),當(dāng)然代理模式與外觀模式的側(cè)重點(diǎn)還是有所不同,外觀模式是將眾多細(xì)粒度的功能,封裝成一個(gè)粗粒度的功能,供客戶(hù)應(yīng)用程序使用。而代理模式,為其他對(duì)象提供一個(gè)代理類(lèi),通過(guò)該代理類(lèi)來(lái)完成目標(biāo)對(duì)象的訪問(wèn),代理模式相對(duì)外觀模式來(lái)說(shuō),關(guān)鍵不同是在內(nèi)部,外觀我們知道是將細(xì)粒度的功能進(jìn)行簡(jiǎn)單封裝,而代理模式則是內(nèi)部實(shí)現(xiàn)很復(fù)雜,其復(fù)雜性主要體現(xiàn)在來(lái)自如下的幾類(lèi)復(fù)雜性:         image

  可能上述的復(fù)雜性還不完整,例如還可能有目前的比較新興的大數(shù)據(jù)量的虛擬代理或者是智能代理,這方面由于自身不足,所以還無(wú)法講述。

  本文將會(huì)結(jié)合舉例說(shuō)明上述的幾類(lèi)代理的復(fù)雜性的簡(jiǎn)單說(shuō)明,希望能說(shuō)明清楚。

  三、本文大綱

       a、上篇回顧。

       b、摘要。

       c、本文大綱。

       d、代理模式的特點(diǎn)及使用場(chǎng)景。

       e、代理模式的經(jīng)典實(shí)現(xiàn)。

       f、代理模式的其他方案。

       g、代理模式使用總結(jié)。

       h、系列進(jìn)度。

       i、下篇預(yù)告。

  四、代理模式的特點(diǎn)及使用場(chǎng)景

  我們先來(lái)看看代理模式的特點(diǎn)及使用場(chǎng)景吧,我們先來(lái)看看一個(gè)簡(jiǎn)單的場(chǎng)景吧:

      我們現(xiàn)在要構(gòu)建一個(gè)分布式應(yīng)用程序,那么一般在.NET平臺(tái)下,我們一般會(huì)采用WCF或者WebService的方式來(lái)發(fā)布應(yīng)用,不管是平時(shí)大家聽(tīng)說(shuō)的SOA架構(gòu)的實(shí)現(xiàn),還是其他的ESB總線架構(gòu)等,也無(wú)非是二種實(shí)現(xiàn)方式,一種是通過(guò)API接口編程來(lái)實(shí)現(xiàn),通過(guò)WCF的Remoting或者是其他的方式來(lái)調(diào)用遠(yuǎn)程服務(wù),另一種是通過(guò)WebService的形式來(lái)發(fā)布服務(wù),那么既然有了發(fā)布服務(wù)之后,那么我們之后的操作可能更多關(guān)心的是,如果在客戶(hù)端使用這個(gè)服務(wù),那么一般我們可能采用的最常用的方式,就是在客戶(hù)端由平臺(tái)自動(dòng)生成一個(gè)代理或者我們自己寫(xiě)一個(gè)代理類(lèi),當(dāng)然這個(gè)代理類(lèi)可以是通用的代理類(lèi)或者是為某些服務(wù)單獨(dú)寫(xiě)代理,能夠更方便的使用及提升效率等。

      通過(guò)上面的說(shuō)明,那么我們現(xiàn)在基本上知道了,代理模式的作用體現(xiàn)在哪里,下面我們來(lái)詳細(xì)展開(kāi)說(shuō)明吧;當(dāng)我們的一個(gè)服務(wù)寫(xiě)的很復(fù)雜,但是我們?cè)诳蛻?hù)端調(diào)用的時(shí)候,我們又不希望在客戶(hù)端使用起來(lái)太復(fù)雜,這個(gè)時(shí)候,可能我們想我們通過(guò)使用代理類(lèi),那么通過(guò)代理類(lèi),這個(gè)客戶(hù)端與遠(yuǎn)程的服務(wù)類(lèi)進(jìn)行交互過(guò)程就變成客戶(hù)端與代理類(lèi)的交互,那么給客戶(hù)的感覺(jué)就像服務(wù)類(lèi)就在本地一樣,這樣不但降低了復(fù)雜性,而且也降低了耦合性。

      那么一般代理類(lèi)有什么要求呢?一般來(lái)說(shuō)代理對(duì)象必須實(shí)現(xiàn)目標(biāo)對(duì)象定義的一些接口,只有這樣,客戶(hù)端應(yīng)用程序在使用的時(shí)候,通過(guò)接口調(diào)用來(lái)訪問(wèn)目標(biāo)對(duì)象的服務(wù),否則就等于引入復(fù)雜度,反而沒(méi)有解決問(wèn)題。

      使用代理的目的是控制客戶(hù)端程序訪問(wèn)目標(biāo)對(duì)象,因此代理必須知道目標(biāo)對(duì)象的類(lèi)型及目標(biāo)對(duì)象在哪里,如何訪問(wèn)等都必須明確。

      代理對(duì)象有的時(shí)候也可以是抽象類(lèi)型,這樣目標(biāo)類(lèi)型就可以是未確定的,我們可以通過(guò)創(chuàng)建型模式來(lái)動(dòng)態(tài)的創(chuàng)建目標(biāo)對(duì)象,當(dāng)然前提是這些目標(biāo)對(duì)象是代理對(duì)象類(lèi)型。

  五、代理模式的經(jīng)典實(shí)現(xiàn)

  下面給出代理模式的經(jīng)典實(shí)現(xiàn):

  我們以如下場(chǎng)景為例,我們現(xiàn)在要實(shí)現(xiàn)一個(gè)MP3播放的相關(guān)功能,一般來(lái)說(shuō)有很多的音頻文件;

  下面我們來(lái)看看如何使用代理模式來(lái)實(shí)現(xiàn)。

       (1)、定義客戶(hù)端調(diào)用的具體的音樂(lè)媒體類(lèi)型類(lèi)型。                image

        (2)、定義客戶(hù)端調(diào)用的目標(biāo)對(duì)象的接口。          image

        (3)、定義具體的目標(biāo)類(lèi)型的實(shí)現(xiàn)。         image

        (4)、定義代理類(lèi),該代理類(lèi)實(shí)現(xiàn)了目標(biāo)類(lèi)型的接口。                image

         (5)、具體的客戶(hù)端調(diào)用。                image

   上面基本上給出了一個(gè)簡(jiǎn)單的例子說(shuō)明,當(dāng)然具體的代理模式的思路就是這樣了,當(dāng)然參考上面的類(lèi)圖來(lái)做的話(huà),和我的這個(gè)形式差不多,具體的思想就是為目標(biāo)類(lèi)型定義一個(gè)接口,然后代理類(lèi)實(shí)現(xiàn)該接口,那么在代理類(lèi)中指定具體的目標(biāo)類(lèi)型的調(diào)用,完成目標(biāo)類(lèi)型的調(diào)用,返回調(diào)用后的結(jié)果,那么就等于代理類(lèi)封裝了目標(biāo)類(lèi)型的調(diào)用。

  六、代理模式的其他實(shí)現(xiàn)方案

  上面我們給出了代理模式的經(jīng)典實(shí)現(xiàn)方案,那么我們本節(jié)看看其他的實(shí)現(xiàn)方案,來(lái)擴(kuò)展下我們的方案的使用場(chǎng)景及一些其他的應(yīng)用場(chǎng)景的情況:

  我們給出WebService的示例過(guò)程吧:

      (1)、 為了說(shuō)明我們給出的示例過(guò)程,我們來(lái)新建一個(gè)ASP.NET WEB應(yīng)用程序網(wǎng)站,添加一個(gè)WebService服務(wù)文件。       image

      (2)、 選擇添加一個(gè)WebService文件。image

     (3)、添加完后,修改HelloWord方法,添加一個(gè)name字段,代表輸入字符串,輸出相應(yīng)的代碼。  image

      (4)、添加完畢后,在瀏覽器中查看。image

      (5)、測(cè)試,是否服務(wù)正確。運(yùn)行后的結(jié)果應(yīng)該如下:         image

  置于其他的相應(yīng)的信息我就補(bǔ)貼出來(lái)了,然后我們將webservice服務(wù)發(fā)布出來(lái),通過(guò)二種形式來(lái)添加代理。

  1、通過(guò)web引用的形式:

  (1)、先找到webservice服務(wù)的發(fā)布地址

image

  (2)、復(fù)制地址,并且在要引用該webservice服務(wù)的項(xiàng)目中在引用文件夾中點(diǎn)擊右鍵。

image

  (3)、將復(fù)制的地址,輸入到服務(wù)引用的地址欄中。

image

  (4)、點(diǎn)擊前往,系統(tǒng)就會(huì)自動(dòng)與webservice建立測(cè)試連接。

image

  如果沒(méi)有出現(xiàn)上述的服務(wù)內(nèi)容,那么則可能服務(wù)沒(méi)有發(fā)布,或者服務(wù)的引用添加的路徑不對(duì)等。點(diǎn)擊確定,這個(gè)時(shí)候,我們來(lái)看看代理文件生成的內(nèi)容:

image

  我們來(lái)看看系統(tǒng)為我們自動(dòng)生成的WEB服務(wù)代理的代碼吧:

  通過(guò)reflactor中的對(duì)象瀏覽器來(lái)查看系統(tǒng)生成的內(nèi)容吧:

image

  具體的代碼太多了,我這里就不貼出了,大家可以看看,我這里給出解析webservice的一些通用的統(tǒng)一代理代碼。

image

image

  這樣就完成通用的Get請(qǐng)求的方式來(lái)調(diào)用webservice服務(wù)。

  七、代理模式使用總結(jié)

  通過(guò)上面的webservice的講述,我想大家對(duì)代理模式還是會(huì)有些陌生,其實(shí)代理模式我們前面也說(shuō)道,代理是將目標(biāo)對(duì)象的復(fù)雜性進(jìn)行封裝,通過(guò)代理來(lái)完成調(diào)用,那么我們針對(duì)前面的客戶(hù)端調(diào)用的目標(biāo)類(lèi)型的接口定義,并且目標(biāo)對(duì)象要實(shí)現(xiàn)這個(gè)接口,代理類(lèi)也要實(shí)現(xiàn)這個(gè)接口。

  下面來(lái)總結(jié)下代理模式與外觀模式的區(qū)別:

  1、外觀模式也是屏蔽復(fù)雜性的,但是外觀模式不會(huì)實(shí)現(xiàn)客戶(hù)端調(diào)用的目標(biāo)類(lèi)型接口。

  2、一般客戶(hù)端調(diào)用外觀模式的方法都是直接調(diào)用。

  3、代理模式中對(duì)客戶(hù)端目標(biāo)對(duì)象類(lèi)型抽象接口具體化了。

  4、外觀模式是代理模式中一種特殊的子級(jí)模式(廣泛的,非約束性)。

  針對(duì)前面我們提到過(guò),代理模式中還有將代理類(lèi)定義成抽象類(lèi)型,然后完成動(dòng)態(tài)的調(diào)用的情況,那么我們看看我們?nèi)绾蝸?lái)組織呢?

  1、定義多個(gè)播放文件格式對(duì)象:

image

  新增加上述的3個(gè)文件。

  2、修改playProxy的代碼如下:

image

  3、具體的代理代碼如下:這里參考AOP的實(shí)現(xiàn)機(jī)制。

image

  4、具體的調(diào)用代碼如下:

image

  當(dāng)然這里的具體的調(diào)用過(guò)程還有很多方法可以進(jìn)行改進(jìn)的更好,比如在內(nèi)部的枚舉模式,修改成創(chuàng)建工廠的形式來(lái)完成對(duì)象的動(dòng)態(tài)創(chuàng)建及調(diào)用等。我這里就不進(jìn)行優(yōu)化了,只是展示出思路和方案,希望大家提出不同的意見(jiàn)!

NET技術(shù)系統(tǒng)架構(gòu)技能之設(shè)計(jì)模式—代理模式,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品伦理一区二区三区 | 午夜精品一区二区三区在线视 | 综合色在线 | 国产成人精品a视频一区www | 99久久精品国产毛片 | 久综合 | 成人一区二 | 欧美成人高清 | 久久精品欧美一区二区三区不卡 | 欧美二区在线 | av毛片 | 欧美综合久久久 | 精品伊人久久 | 久久国产精品亚洲 | 久久国产精品亚洲 | 在线日韩 | 国产清纯白嫩初高生视频在线观看 | 一级毛片大全免费播放 | 亚洲成人av在线播放 | 中文字幕福利 | 成人a视频片观看免费 | 欧美在线国产精品 | 精品一区二区在线看 | 国产在线一区观看 | 国产在线观看一区 | 国产一区二区三区 | 夜夜夜操 | 日韩成人av在线 | 国产一区二区三区高清 | 欧美成人精品一区二区三区 | 久久久久久www | 在线视频 欧美日韩 | 国产精品一二区 | 亚洲黄色片免费观看 | 国内自拍真实伦在线观看 | 欧美极品在线视频 | 日本一区二区三区在线观看 | 中文字幕在线观看一区 | 国产激情在线 | 国产欧美精品区一区二区三区 | 天天精品在线 |