日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

漫谈设计模式

發(fā)布時(shí)間:2024/4/17 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漫谈设计模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  什么是設(shè)計(jì)模式?(以前一直聽說,感覺很高大上)設(shè)計(jì)模式是對(duì)一系列OO設(shè)計(jì)中的經(jīng)驗(yàn)進(jìn)行復(fù)用。最終的目的是提高系統(tǒng)的復(fù)用、易維護(hù)、易擴(kuò)展。軟件系統(tǒng)需求總是在不斷變化,面對(duì)的情況也會(huì)變化(不僅僅是因?yàn)楫a(chǎn)品狗……)。在軟件開發(fā)后,大量時(shí)間會(huì)進(jìn)行維護(hù)。設(shè)計(jì)模式就是盡量設(shè)計(jì)能夠適應(yīng)變化的系統(tǒng),使系統(tǒng)更有彈性,面對(duì)變化更能游刃有余。將設(shè)計(jì)模式的思想融合到自己的大腦,面對(duì)不同的需求應(yīng)用對(duì)應(yīng)的設(shè)計(jì)模式,就能設(shè)計(jì)出比較流弊(NB)的結(jié)構(gòu),提升代碼質(zhì)量。

  接下來,我們就來聊聊各個(gè)設(shè)計(jì)模式吧。

一、策略模式(Strategy Pattern)

  策略模式是什么京東?先看看定義:“定義算法族,分別封裝起來,讓他們之間可以相互替換,此模式讓算法的變化獨(dú)立于使用算法的客戶”。……嗯……還是不知道什么意思。大概翻譯一下:策略模式就是讓方法的實(shí)現(xiàn)獨(dú)立于方法的使用者,使得方法的變化不會(huì)影響使用者。打個(gè)比方:比如一個(gè)武士(使用者),具備一個(gè)“使用武器”的技能(方法),但是使用什么武器呢?這個(gè)武器可能是刀槍棍棒,不一定。那我們就把這個(gè)“使用武器”這個(gè)方法獨(dú)立于武士,把二者的實(shí)現(xiàn)分開。

  定義大概就是那樣。我們來看看一個(gè)具體的應(yīng)用場(chǎng)景。

  場(chǎng)景:我們定義一個(gè)鴨子類,鴨子具有飛行的方法。但是有可能不同的鴨子飛的方法不一樣,有的像普通鴨子那樣飛,有的像飛機(jī)那樣飛(發(fā)揮一點(diǎn)想象力)。因此“飛”這個(gè)方法就是容易改變的。因此我們就將這個(gè)方法進(jìn)行抽象,將其與鴨子的實(shí)現(xiàn)進(jìn)行分離,盡量針對(duì)接口編程而非實(shí)現(xiàn)編程。所以將飛行方法用一個(gè)接口進(jìn)行封裝,具體的不同的飛行類實(shí)現(xiàn)接口。然后采用組合的方式將飛行類包含到鴨子類中。這樣就使得方法和使用者獨(dú)立開來。

  

?

二、觀察者模式(Observer)

  觀察者模式就比較容易明白了。先看看定義:“在對(duì)象之間定義一對(duì)多的依賴,這樣一來,當(dāng)一個(gè)對(duì)象改變狀態(tài),依賴它的對(duì)象都會(huì)收到通知,并自動(dòng)更新”。定義不難理解,但是什么情況下使用觀察者模式呢?應(yīng)該也不難想到,比如當(dāng)多個(gè)或者一個(gè)對(duì)象需要訪問同一個(gè)數(shù)據(jù)源,共享一個(gè)數(shù)據(jù)的時(shí)候(一對(duì)多),那就需要采用觀察者模式。同樣,我們具體用一個(gè)場(chǎng)景來分析。

  場(chǎng)景:我們有一個(gè)氣象數(shù)據(jù)收集站(很不想用書上的這個(gè)例子……),會(huì)時(shí)不時(shí)的更新氣象站手機(jī)的數(shù)據(jù),如溫度啊,風(fēng)向啊,污染指數(shù)啊,PM2.5之類的。現(xiàn)在我們開發(fā)三個(gè)APP,這三個(gè)APP都需要獲取氣象站的數(shù)據(jù),然后按照自己的業(yè)務(wù)邏輯處理獲得的數(shù)據(jù)。

  那很明顯,上述就是一個(gè)一對(duì)多的例子,適合用觀察者模式。觀察者模式有一些固定的組件,先看圖。

  可以看到,觀測(cè)著模式分為兩個(gè)部分:對(duì)象subject和gu觀察者Observer。對(duì)象就是我們需要共享的資源,觀察者就是要使用數(shù)據(jù)的客戶。作為一對(duì)多,要實(shí)現(xiàn)對(duì)象在更新的時(shí)候?qū)λ杏^測(cè)者的通知,因此對(duì)象那邊就需要對(duì)觀察者進(jìn)行管理,知道有哪些觀察者,因此對(duì)象需要提供對(duì)觀察者的加入register、退出remove、群發(fā)消息notify的功能。這里我們用接口實(shí)現(xiàn)Subject。

  對(duì)于觀察者,我們需要給對(duì)象提供更新數(shù)據(jù)的方法,這樣對(duì)象才知道以什么方式來通知觀察者數(shù)據(jù)。因此觀察者統(tǒng)一實(shí)現(xiàn)Observer接口。這樣,觀察者和對(duì)象就建立了聯(lián)系。

  在java中,有對(duì)觀察者模式的實(shí)現(xiàn),在java.util.Observe*中實(shí)現(xiàn)。但是他的對(duì)象管理是用類實(shí)現(xiàn)的,WeatherDate是繼承父類。這樣就沒有定義為接口好。因?yàn)閖ava不支持多繼承,如果WeatherData還想繼承其他類怎么辦,同時(shí)違背了“多組合,少繼承”的原則。

在jDK源碼中,很多都運(yùn)用了觀察者模式,如Swing,RMI等等。

?

三、裝飾者模式(Decorator)

  裝飾者模式也是比較明確的設(shè)計(jì)模式。首先看定義:“動(dòng)態(tài)地將責(zé)任附加到對(duì)象上。想要擴(kuò)展功能,裝飾著提供有別于繼承的另一種選擇”。簡(jiǎn)單解釋一下,即當(dāng)你想對(duì)某一種現(xiàn)有的東西進(jìn)行擴(kuò)展,但是又不能修改他的代碼,那就對(duì)他進(jìn)行包裝,把你需要新加上去的功能“裝飾”上去。舉個(gè)栗子

  場(chǎng)景:你在面館里點(diǎn)面(終于不用書上的例子了!),然后你就看菜單啊。菜單這樣寫著:經(jīng)典蘭州拉面(8¥),火腿(1¥),雞蛋(2¥),兩片羊肉(3¥)。我們現(xiàn)在要給這個(gè)餐廳做一個(gè)餐廳點(diǎn)菜管理系統(tǒng),需要對(duì)每次客人點(diǎn)的菜進(jìn)行記錄,比如點(diǎn)的什么面啊,加了什么其他的沒啊。因?yàn)橛械臅r(shí)候,有的人要面+雞蛋,有的人面+火腿,有的人面+雞蛋+火腿(太鋪張浪費(fèi)了……)。很明顯,這個(gè)場(chǎng)景里面有一個(gè)不變的,或者說基本的,就是那碗面。而要變化的就是要不要加其他的東西。往面中加其他東西的過程就是在對(duì)那碗面?zhèn)€性化進(jìn)行“裝飾”。(怎么感覺自己好啰嗦……)那我們?cè)趺磻?yīng)用裝飾者模式來設(shè)計(jì)這個(gè)場(chǎng)景呢

  在裝飾者模式中,由兩個(gè)部分組成。一個(gè)叫組件(被裝飾者),一個(gè)叫裝飾者。二者都是繼承至同一個(gè)父類。這里用到繼承,不是為了需要繼承行為,而是需要繼承同一種模式,使得組件和裝飾者能夠進(jìn)行結(jié)合(因?yàn)槎紝儆谝活?#xff09;。在此應(yīng)用場(chǎng)景中,蘭州拉面本身為需要被裝飾的組件,而加的蛋和腸作為裝飾者。

當(dāng)需要進(jìn)行使用時(shí),將二者進(jìn)行結(jié)合?經(jīng)典蘭州拉面 拉面 = new 火腿腸(經(jīng)典蘭州拉面)。這樣就等于新建了一個(gè)加了腸的蘭州拉面,通過調(diào)用cost可以計(jì)算加了腸的蘭州拉面多少錢。可以像上面一樣通過不同的包裝進(jìn)行有選擇的擴(kuò)展經(jīng)典蘭州拉面。這樣就避免了使用繼承。 在java.io中就使用了大量的裝飾者模式。裝飾者模式,就是體現(xiàn)了我們?cè)O(shè)計(jì)的一個(gè)重要原則,即開閉原則:對(duì)擴(kuò)展開放,對(duì)修改閉合。 但是對(duì)于裝飾者模式,存在的問題就是如果存在依賴于組件本身的類型(因?yàn)榧恿搜b飾者就會(huì)改變本身的類型),那就不好操作了。

四、工廠模式?

  工廠模式應(yīng)該說是用的比較多的一種設(shè)計(jì)模式。在工廠模式中,分為兩類,一種是工廠方法模式,一種是抽象工廠模式。二者還是有一定的區(qū)別。

  我們首先看看工程方法模式(Factory Method Pattern)。定義:“定義了一個(gè)創(chuàng)建對(duì)象的接口,但由子類決定要實(shí)例化的類是哪一個(gè)。工廠方法讓類把實(shí)例化推遲到子類”。好像不是很直觀。沒關(guān)系,老規(guī)矩,以實(shí)例分析,看類圖。

  場(chǎng)景:有面館生產(chǎn)面。有做方便面的,有做拉面的。都是首先訂外賣的訂一種面, 然后對(duì)應(yīng)的面館就做面。

  工廠方法的特點(diǎn)就是首先通過抽象類的編寫,固定了不同面館面的模式。通過繼承基類,在子類中具體實(shí)例化自己的業(yè)務(wù)邏輯。

?

轉(zhuǎn)載于:https://www.cnblogs.com/ren-jie/p/5453078.html

總結(jié)

以上是生活随笔為你收集整理的漫谈设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。