設計模式簡要論述_第1頁
設計模式簡要論述_第2頁
設計模式簡要論述_第3頁
設計模式簡要論述_第4頁
設計模式簡要論述_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、GRASPP(Genneraal RRespponssibiilitty AAssiignmmentt Sooftwwaree Paatteernss)創(chuàng)建者(CCreaatorr)問題:誰創(chuàng)創(chuàng)建了AA?解決方案:如果以以下條件件之一為為真時(越越多越好好),將將創(chuàng)建類類A實例例的職責責分配給給B:B“包含”或組成成聚合了了AB記錄AB緊密地使使用AB具有A的的初始化化數(shù)據(jù)舉例:比如在富客客戶端應應用開發(fā)發(fā)中,主主程序創(chuàng)創(chuàng)建一個個主窗口口對象,然然后有主主窗口對對象來負負責創(chuàng)建建它內(nèi)部部的各種種菜單、按按鈕等對對象(而而不是由由主程序序來創(chuàng)建建這些菜菜單或按按鈕對象象之后,再再把它設設置到主主

2、窗口中中去)信息專家(Infformmatiion Exppertt)問題:給對對象分配配職責的的基本原原則是什什么?解決方案:把職責責分配給給具有完完成該職職責所需需信息的的那個類類。(描描述一種種直覺!)舉例:publiic cclasss CClasssess privvatee innt iid;privvatee Seet sstuddentts;/描述述一種直直覺publlic voiid aaddSStuddentt(Sttudeent stuudennt)if(stuudennts = nulll)sttudeentss = neww HaashSSet();stuudennt

3、s.addd(sttudeent);/將職職責放在在擁有這這個職責責所需信信息的那那個類中中publlic boooleaan hhasSStuddentt(Sttudeent stuudennt)forr (IIterratoor iiterratoor = sttudeentss.itteraatorr(); itteraatorr.haasNeext();) Sttudeent s = (SStuddentt) iiterratoor.nnextt();iff(s.equualss(sttudeent)rretuurn truue;retturnn faalsee;publiic ccl

4、asss SStuddentt privvatee innt iid;privvatee Sttrinng nnamee;/判斷斷兩個學學生對象象是否相相同的職職責,交交給Sttudeent來來完成,因因為它擁擁有這個個/職責責所需要要的所有有信息publlic boooleaan eequaals(Stuudennt sstuddentt) if(namme.eequaals(stuudennt.ggetNNamee()reeturrn ttruee;retturnn faalsee;publiic cclasss TTreeeNodde privvatee innt iid;privvat

5、ee innt lleveel;privvatee Sttrinng nnodeeNamme;privvatee TrreeNNodee paarennt;privvatee Liist chhilddrenn;publlic voiid pprinnt()forr(innt ii=0; ilevvel; i+)Syysteem.oout.priint(-);Sysstemm.ouut.pprinntlnn(noodeNNamee);forr (IIterratoor iteerattor = cchilldreen.iiterratoor(); iiterratoor.hhasNNextt(

6、);) TrreeNNodee noode = iteerattor.nexxt();noode.priint();低耦合(LLow Couupliing)所謂耦合,即即兩個對對象之間間聯(lián)系的的緊密程程度問題:如何何減少因因變化產(chǎn)產(chǎn)生的影影響?解決方案:分配職職責以使使耦合保保持在較較低的水水平。低耦合是構(gòu)構(gòu)建軟件件最重要要的目標標之一。要注意:我我們講低低耦合,是是降低與與不穩(wěn)定定系統(tǒng)之之間的耦耦合度,而而不是那那些穩(wěn)定定的系統(tǒng)統(tǒng),比如如說我們們在JAAVA編編程過程程中,沒沒有必要要想專門門的辦法法來降低低與JDDK核心心類庫之之間的耦耦合度,因因為JDDK核心心類庫非非常穩(wěn)定定,很少少會

7、發(fā)生生變化。高內(nèi)聚(HHighh Coohessionn)所謂內(nèi)聚,即即對象職職責的相相關性(或或?qū)ο蟮牡牟僮髦g聯(lián)系系的緊密密程度)。高內(nèi)聚,即保持對象職責的高度相關性。不良內(nèi)聚和不良耦合往往都是齊頭并進的!問題:怎樣樣保持對對象是有有重點的的、可理理解的、可可管理的的,并且且能夠支支持低耦耦合?解決方案:分配職職責以保保持較高高的內(nèi)聚聚性。內(nèi)聚性較低低的類,要要做許多多不相關關的工作作,或需需要完成成大量的的工作。這這樣的類類是不合合理的。這這樣的類類會有下下列問題題:難以理解難以復用難以維護脆弱,經(jīng)常常會受到到變化的的影響高內(nèi)聚、低低耦合是是我們進進行系統(tǒng)統(tǒng)設計時時,應該該盡量要要達到

8、的的目標。但是在某些情況下,這些原則也許不太合適。比如在分布式系統(tǒng)的開發(fā)中。分布式系統(tǒng)開發(fā)中的分布式對象之間的互相調(diào)用,可能會跨越網(wǎng)絡,跨網(wǎng)絡調(diào)用會導致系統(tǒng)性能的下降,為了提高性能,所以必須尋找某種手段來降低跨網(wǎng)絡調(diào)用的次數(shù)??刂破鳎–Conttrolllerr)問題:在UUI層下下首先接接收和協(xié)協(xié)調(diào)(“控制”)系統(tǒng)統(tǒng)操作的的對象是是什么?解決方案:把職責責分配給給能代表表下列選選擇之一一的對象象:代表整個“系統(tǒng)”、“根對象象”(外觀觀控制器器)。 - 一般用用Faadee模式來來實現(xiàn)代表發(fā)生系系統(tǒng)操作作的用例例場景(用用例控制制器)。 - 如果使使用Faaadde來實實現(xiàn)一個個外觀控控制器,

9、會使得這個控制器非常臃腫,那么可以考慮采用用例控制器。舉例:比如說,“導入組組織機構(gòu)構(gòu)的數(shù)據(jù)據(jù)”用例,要要求能夠夠在界面面上上傳傳兩個EExceel文件件,一個個Exccel是是部門信信息,一一個Exxcell是人員員信息。那么在實現(xiàn)這個用例的時候,UI層在接收到數(shù)據(jù)之后,應該將業(yè)務邏輯統(tǒng)一交給一個業(yè)務邏輯處理對象來完成。很顯然,這個業(yè)務邏輯對象,需要調(diào)度Excel處理相關的對象、人員信息處理相關的對象、部門信息處理相關的對象等來完成這個導入數(shù)據(jù)的業(yè)務。此業(yè)務邏輯對象就是用例控制器。要注意:MMVC中中的C,并并不是我我們這里里的控制制器。因因為MVVC中的的C處于于UI層層,而不不是業(yè)務務邏

10、輯層層。多態(tài)(Poolymmorpphissm)問題:如何何處理基基于類型型的選擇擇?如何何創(chuàng)建可可插拔的的軟件構(gòu)構(gòu)件?解決方案:當相關關選擇或或行為隨隨類型(類類)有所所不同時時,使用用多態(tài)操操作為變變化的行行為類型型分配職職責。不要測試對對象的類類型,也也不要使使用條件件邏輯來來執(zhí)行基基于類型型的不同同選擇。純虛構(gòu)(PPuree Faabriicattionn)問題:當你你并不想想違背高高內(nèi)聚和和低耦合合或其它它目標,但但是基于于專家模模式所提提供的方方案又不不合適時時,哪些些對象應應該承擔擔這一職職責?(很很多情況況下,只只對領域域?qū)ο蠓址峙渎氊熦煏е轮虏涣純?nèi)內(nèi)聚或耦耦合,或或者降低低

11、復用潛潛力)解決方案:對人為制造造的類分分配一組組高內(nèi)聚聚的職責責,該類類并不代代表問題題領域的的概念虛構(gòu)構(gòu)的事物物,用以以支持高高內(nèi)聚,低低耦合和和復用。所有GOFF設計模模式(或或其它模模式)都都是純虛虛構(gòu)。間接性(IIndiirecctioon)問題:為了了避免兩兩個或多多個事物物之間的的直接耦耦合,應應該如何何分配職職責?如如何使對對象解耦耦合,以以支持低低耦合并并提供復復用性潛潛力?解決方案:將職責責分配給給中介對對象,避避免它們們之間的的直接耦耦合。中中介實現(xiàn)現(xiàn)了間接接性。大量GOFF模式,如如適配器器、外觀觀等等都都是間接接性的體體現(xiàn)。防止變異(PProttectted Varr

12、iattionn)問題:如何何設計對對象、子子系統(tǒng)和和系統(tǒng),使使其內(nèi)部部的變化化或不穩(wěn)穩(wěn)定性不不會對其其它元素素產(chǎn)生不不良影響響?解決方案:識別預預計變化化或不穩(wěn)穩(wěn)定之處處,分配配職責用用以在這這些變化化之外創(chuàng)創(chuàng)建穩(wěn)定定接口。幾乎所有的的軟件或或架構(gòu)設設計技巧巧,都是是防止變變異的特特例,比比如封裝裝、多態(tài)態(tài)、接口口、虛擬擬機、配配置文件件等等等等等!OOD原則則單一職責原原則(SSRP)就一個類而而言,應應該僅有有一個引引起它變變化的原原因。開放-封閉閉原則(OOCP)軟件實體(類類、模塊塊、函數(shù)數(shù)等等)應應該是可可以擴展展的,但但是不可可修改的的。對于擴展是是開放的的這意味著模模塊的行行為

13、是可可以擴展展的。當當應用的的需求改改變時,我我們可以以對模塊塊進行擴擴展,使使其具有有滿足那那些改變變的新行行為。對于更改是是封閉的的對模塊的行行為進行行擴展時時,不必必改動模模塊的源源代碼或或者二進進制代碼碼。OCP背后后的主要要機制是是抽象與多多態(tài)!Liskoov替換換原則(LLSP)子類型必須須能夠替替換掉它它們的基基類型。簡單的例子子:違反LSPP原則的的例子publlic voiid ssayssomeethiing(Lannguaage lann)Strringg teempSStr = ;if(lann innstaanceeof Chiinesse)teempSStr = 中

14、文;if(lann innstaanceeof Enngliish)teempSStr = 英文文;Sysstemm.ouut.pprinntlnn(現(xiàn)現(xiàn)在你學學習的語語言是:+ttemppStrr);因為如果傳傳遞到ssayssomeethiing方方法中的的Lannguaage是是一個JJapaanesse對象象時,它它將無法法處理!要讓它符合合LSPP也非常常簡單:publiic absstraact claass Lannguaage publlic absstraact Strringg tooStrringg();publiic claass Chiinesse eexteendss LaanguuageeOveerriidepubllic Strringg tooStrringg() retturnn 中文文;publiic claass Engglissh eexteendss LannguaageOveerriidepubllic Strringg tooStrringg() retturnn 英語語;publlic voiid ssayssomeethiing(Lannguaage lann)Sysstemm.ou

溫馨提示

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

評論

0/150

提交評論