visual+c#.net的設(shè)計模式_第1頁
已閱讀1頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、※1※VisualC#.的設(shè)計模式的設(shè)計模式內(nèi)容提要:“四人幫”(GOF)模式被認為是所有其他模式的基礎(chǔ),二十三種設(shè)計模式分為三類:創(chuàng)建型模式(CreationalPattern)、結(jié)構(gòu)型模式(StructuralPattern)和行為型模式(BehavialPattern)。本文對其中比較常用的模式進行了介紹。關(guān)鍵字:創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式引言:設(shè)計模式(DesignPatterns)是開發(fā)人員在實際應(yīng)用程序開發(fā)中,對不斷

2、發(fā)現(xiàn)的軟件設(shè)計問題的重復(fù)解決方案。設(shè)計模式是關(guān)于對象的設(shè)計和交互,這對經(jīng)常出現(xiàn)的軟件開發(fā)挑戰(zhàn)的一些完美和重用的解決方案提供了一個交流平臺。正文:實例實例1Singleton模式模式本實例演示Sigleton模式的應(yīng)用?!揪幊桃c】【編程要點】Singleton可以說是最簡單也最實用的一個設(shè)計模式。顧名思義,Singleton就是確保一個類只有惟一的一個實例。Singleton主要用于對象的創(chuàng)建,這意味著,如果某個類采用了Singleto

3、n模式,則在這個類被創(chuàng)建后,它將有且僅有一個實例可供訪問。很多時候都會需要Singleton模式,最常見的比如整個應(yīng)用程序中只有一個連接數(shù)據(jù)庫的Connection實例;又比如要求一個應(yīng)用程序中只存在某個用戶數(shù)據(jù)結(jié)構(gòu)的惟一實例,這都可以通過應(yīng)用Singleton模式達到目的。如此,Singleton似乎有些像全局對象。但是實際上,并不能用全局對象代替Singleton模式,這是因為:其一,大量使用全局對象會使得程序質(zhì)量降低,而且C#根本

4、就不支持全局變量;其二,全局對象的方法并不能阻止人們將一個類實例化多次。除了類的全局實例外,開發(fā)人員仍然可以通過類的構(gòu)造函數(shù)創(chuàng)建類的多個局部實例。而Singleton模式則通過從根本上控制類的創(chuàng)建,將“保證只有一個實例”這個任務(wù)交給了類本身,開發(fā)人員不可能再有其他途徑得到類的多個實例。這一點是全局對象方法與Singleton模式的根本區(qū)別。Singleton模式的實現(xiàn)基于兩個要點:(1)不直接用類的構(gòu)造函數(shù),而另外提供一個public的

5、靜態(tài)方法來構(gòu)造類的實例。通常這個方法取名為Instance。public保證了它的全局可見性,靜態(tài)方法保證了不會創(chuàng)建出多余的實例。(2)將類的構(gòu)造函數(shù)設(shè)為private,即將構(gòu)造函數(shù)“隱藏”起來,任何企圖使用構(gòu)造函數(shù)創(chuàng)建實例的方法都將報錯。這樣就阻止了開發(fā)人員繞過上面的Instance方法直接創(chuàng)建類的實例。通過以上兩點就可以完全控制類的創(chuàng)建,無論有多少地方需要用到這個類,它們訪問的都是類的惟一生成的那個實例。【程序?qū)崿F(xiàn)】【程序?qū)崿F(xiàn)】實現(xiàn)

6、方式一:usingSystemnamespaceSingletonusingSystemclassSingletonDemo1privatestaticSingletonDemo1theSingleton=nullprivateSingletonDemo1()publicstaticSingletonDemo1Instance()if(null==theSingleton)※3※的Singleton對象就是設(shè)計模式Singleton思想

7、在.中的應(yīng)用。那么,如何在.的Remoting中利用Singleton?.提供了兩種方式將一個遠程對象注冊為Singleton:直接調(diào)用RegisterWellKnownServiceType方法,在參數(shù)中指定對象類型為Singleton;或在配置文件web.config中設(shè)定遠程對象的類型為Singleton。這兩種方法的效果相同,所不同的是后一種方法顯得更加簡便,因為改變配置文件的內(nèi)容后,不必重新編譯應(yīng)用程序。下列代碼顯示了如何使用

8、RegisterWellKnownServiceType方法注冊遠程對象類型:RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType(“RemotingSamples.HelloServerobject“)“SayHello“WellKnownObjectMode.Singleton)參數(shù)“SayHello”是客戶端訪問遠程對象(這里是HelloServer)時用來

9、代表遠程對象的URI,例如tcp:localhost:8085SayHello(假設(shè)使用的是TCP通道)。最后一個參數(shù)就指明了這個遠程對象是Singleton類型。一旦將遠程對象注冊為Singleton,則在第一次客戶端調(diào)用HelloServer的方法時創(chuàng)建這個遠程對象,然后保持它直到客戶端中斷連接或?qū)ο蟪瑫r被銷毀為止。在此期間,無論有多少個客戶端調(diào)用這個遠程對象,所有的客戶請求都將由那個已經(jīng)存在的惟一實例接受處理。實例實例2簡單工廠(

10、簡單工廠(SimpleFacty)模式)模式本實例演示如何使用簡單工廠模式編程?!揪幊桃c】【編程要點】簡單工廠模式根據(jù)提供給它的數(shù)據(jù),返回幾個可能類中的一個類的實例。通常它返回的類都有一個共同的父類和共同的方法,但每個方法執(zhí)行的任務(wù)不同,而且根據(jù)不同的數(shù)據(jù)進行了優(yōu)化。如圖1所示,該類圖中,X是一個基類,XY類和XZ類從它派生出來,Xfacty類根據(jù)給出的參數(shù)決定返回哪一個子類。在右邊定義了一個getClass方法,傳遞給它某個值,然后

11、返回X類的某個實例。返回哪一個類的實例與程序員無關(guān),因為這些類有同樣的方法,只是實現(xiàn)不同。返回哪一個類的實例完全取決于工廠,工廠功能可能很復(fù)雜,但通常都是相當簡單的。圖1【程序?qū)崿F(xiàn)】【程序?qū)崿F(xiàn)】usingSystemnamespaceSimpleFactyPatternSimpleFactyPattern的摘要說明。publicclassSimpleFactyPattern定義Food接口publicinterfaceFood烹飪voi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論