1. GOF-23 模式分類
從目的來(lái)看:
- 創(chuàng)建型(Creational)模式:將對(duì)象的部分創(chuàng)建工作延遲到子類或者其他對(duì)象,從而應(yīng)對(duì)需求變化為對(duì)象創(chuàng)建時(shí)具體類型實(shí)現(xiàn)引來(lái)的沖擊。
- 結(jié)構(gòu)型(Structural)模式:通過(guò)類繼承或者對(duì)象組合獲得更靈活的結(jié)構(gòu),從而應(yīng)對(duì)需求變化為對(duì)象的結(jié)構(gòu)帶來(lái)的沖擊。
- 行為型(Behavioral)模式:通過(guò)類繼承或者對(duì)象組合來(lái)劃分類與對(duì)象間的職責(zé),從而應(yīng)對(duì)需求變化為多個(gè)交互的對(duì)象帶來(lái)的沖擊。
從范圍來(lái)看:
- 類模式處理類與子類的靜態(tài)關(guān)系。
- 對(duì)象模式處理對(duì)象間的動(dòng)態(tài)關(guān)系。
?2. 從封裝變化角度對(duì)模式分類
3.重構(gòu)獲得模式 Refactoring to Patterns
- 面向?qū)ο笤O(shè)計(jì)模式是“好的面向?qū)ο笤O(shè)計(jì)”,所謂“好的面向?qū)ο笤O(shè)計(jì)”指是那些可以滿足“應(yīng)對(duì)變化,提高復(fù)用”的設(shè)計(jì)。
- 現(xiàn)代軟件設(shè)計(jì)的特征是“需求的頻繁變化”。設(shè)計(jì)模式的要點(diǎn)是“尋找變化點(diǎn),然后在變化點(diǎn)處應(yīng)用設(shè)計(jì)模式,從而來(lái)更好地應(yīng)對(duì)需求的變化”.“什么時(shí)候、什么地點(diǎn)應(yīng)用設(shè)計(jì)模式”比“理解設(shè)計(jì)模式結(jié)構(gòu)本身”更為重要。
- 設(shè)計(jì)模式的應(yīng)用不宜先入為主,一上來(lái)就使用設(shè)計(jì)模式是對(duì)設(shè)計(jì)模式的最大誤用。沒(méi)有一步到位的設(shè)計(jì)模式。敏捷軟件開(kāi)發(fā)實(shí)踐提倡的“RefactoringtoPatterns”是目前普遍公認(rèn)的最好的使用設(shè)計(jì)模式的方法。
?3.“組件協(xié)作”模式:
現(xiàn)代軟件專業(yè)分工之后的第一個(gè)結(jié)果是“框架與應(yīng)用程序的劃分”,“組件協(xié)作”模式通過(guò)晚期綁定,來(lái)實(shí)現(xiàn)框架與應(yīng)用程序之間的松耦合,是二者之間協(xié)作時(shí)常用的模式。
典型模式
- TemplateMethod
- Observer/Event
- Strategy
?4.Template Method 模式
動(dòng)機(jī)(Motivation)
- 在軟件構(gòu)建過(guò)程中,對(duì)于某一項(xiàng)任務(wù),它常常有穩(wěn)定的整體操作結(jié)構(gòu),但各個(gè)子步驟卻有很多改變的需求,或者由于固有的原因(比如框架與應(yīng)用之間的關(guān)系)而無(wú)法和任務(wù)的整體結(jié)構(gòu)同時(shí)實(shí)現(xiàn)。
- 如何在確定穩(wěn)定操作結(jié)構(gòu)的前提下,來(lái)靈活應(yīng)對(duì)各個(gè)子步驟的變化或者晚期實(shí)現(xiàn)需求?
?模式定義:
定義一個(gè)操作中的算法的骨架 (穩(wěn)定),而將一些步驟延遲(變化)到子類中。Template Method使得子類可以不改變(復(fù)用)一個(gè)算法的結(jié)構(gòu)即可重定義(override 重寫(xiě))該算法的某些特定步驟。
?
?
結(jié)構(gòu):
?5.Strategy 策略模式
動(dòng)機(jī)(Motivation)
- 在軟件構(gòu)建過(guò)程中,某些對(duì)象使用的算法可能多種多樣,經(jīng)常改變,如果將這些算法都編碼到對(duì)象中,將會(huì)使對(duì)象變得異常復(fù)雜;而且有時(shí)候支持不使用的算法也是一個(gè)性能負(fù)擔(dān)。
- 如何在運(yùn)行時(shí)根據(jù)需要透明地更改對(duì)象的算法?將算法與對(duì)象本身解耦,從而避免上述問(wèn)題?
?模式定義
定義一系列算法,把它們一個(gè)個(gè)封裝起來(lái),并且使它們可互相替換(變化)。該模式使得算法可獨(dú)立于使用它的客戶程序(穩(wěn)定)而變化(擴(kuò)展,子類化)。
——《設(shè)計(jì)模式》GoF
?要點(diǎn)總結(jié)
- Strategy及其子類為組件提供了一系列可重用的算法,從而可以使得類型在運(yùn)行時(shí)方便地根據(jù)需要在各個(gè)算法之間進(jìn)行切換。
- Strategy模式提供了用條件判斷語(yǔ)句以外的另一種選擇,消除條件判斷語(yǔ)句,就是在解耦合。含有許多條件判斷語(yǔ)句的代碼通常都需要Strategy模式。
- 如果Strategy對(duì)象沒(méi)有實(shí)例變量,那么各個(gè)上下文可以共享同一個(gè)Strategy對(duì)象
?6.observer觀察者模式
動(dòng)機(jī)(Motivation)
- 在軟件構(gòu)建過(guò)程中,我們需要為某些對(duì)象建立一種“通知依賴關(guān)系”——一個(gè)對(duì)象(目標(biāo)對(duì)象)的狀態(tài)發(fā)生改變,所有的依賴對(duì)象(觀察者對(duì)象)都將得到通知。如果這樣的依賴關(guān)系過(guò)于緊密,將使軟件不能很好地抵御變化。
- 使用面向?qū)ο蠹夹g(shù),可以將這種依賴關(guān)系弱化,并形成一種穩(wěn)定的依賴關(guān)系。從而實(shí)現(xiàn)軟件體系結(jié)構(gòu)的松耦合
?模式定義
定義對(duì)象間的一種一對(duì)多(變化)的依賴關(guān)系,以便當(dāng)一個(gè)對(duì)象(Subject)的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并自動(dòng)更新?!对O(shè)計(jì)模式》GoF文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-732228.html
?要點(diǎn)總結(jié)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-732228.html
- 使用面向?qū)ο蟮某橄螅琌bserver模式使得我們可以獨(dú)立地改變目標(biāo)與觀察者,從而使二者之間的依賴關(guān)系達(dá)致松耦合。
- 目標(biāo)發(fā)送通知時(shí),無(wú)需指定觀察者,通知(可以攜帶通知信息作為參數(shù))會(huì)自動(dòng)傳播。
- 觀察者自己決定是否需要訂閱通知,目標(biāo)對(duì)象對(duì)此一無(wú)所知。
- Observer模式是基于事件的UI框架中非常常用的設(shè)計(jì)模式,也是MVC模式的一個(gè)重要組成部分。
到了這里,關(guān)于模式分類與“組件協(xié)作模式”的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!