設(shè)計(jì)模式簡(jiǎn)要論述_第1頁(yè)
設(shè)計(jì)模式簡(jiǎn)要論述_第2頁(yè)
設(shè)計(jì)模式簡(jiǎn)要論述_第3頁(yè)
設(shè)計(jì)模式簡(jiǎn)要論述_第4頁(yè)
設(shè)計(jì)模式簡(jiǎn)要論述_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

2、到到主窗口口中去)信息專家家(Innforrmattionn Exxperrt)問題:給給對(duì)象分分配職責(zé)責(zé)的基本本原則是是什么?解決方案案:把職職責(zé)分配配給具有有完成該該職責(zé)所所需信息息的那個(gè)個(gè)類。(描述一一種直覺覺?。┡e例:publlic claass Claassees priivatte iint id;priivatte SSet stuudennts;/描描述一種種直覺publlic voiid aaddSStuddentt(Sttudeent stuudennt)iff(sttudeentss = nuull)sstuddentts = neew HHashhSett();sttu

3、deentss.addd(sstuddentt);/將將職責(zé)放放在擁有有這個(gè)職職責(zé)所需需信息的的那個(gè)類類中publlic boooleaan hhasSStuddentt(Sttudeent stuudennt)foor (Iteerattor iteerattor = sstuddentts.iiterratoor(); iiterratoor.hhasNNextt();) SStuddentt s = (Stuudennt) iteerattor.nexxt();iif(ss.eqqualls(sstuddentt)retturnn trrue;reeturrn ffalsse;publl

4、ic claass Stuudennt priivatte iint id;priivatte SStriing namme;/判判斷兩個(gè)個(gè)學(xué)生對(duì)對(duì)象是否否相同的的職責(zé),交給SStuddentt來完成成,因?yàn)闉樗鼡碛杏羞@個(gè)/職職責(zé)所需需要的所所有信息息publlic boooleaan eequaals(Stuudennt sstuddentt) iff(naame.equualss(sttudeent.gettNamme()rretuurn truue;reeturrn ffalsse;publlic claass TreeeNoode priivatte iint id;priivatte

5、 iint levvel;priivatte SStriing noddeNaame;priivatte TTreeeNodde ppareent;priivatte LListt cchilldreen;publlic voiid pprinnt()foor(iint i=00; iileevell; ii+)Systtem.outt.prrintt(-);Syysteem.oout.priintlln(nnodeeNamme);for (Itteraatorr iiterratoor = chhilddrenn.itteraatorr(); itteraatorr.haasNeext();

6、) TTreeeNodde nnodee = itteraatorr.neext();nnodee.prrintt();低耦合(Loww Cooupllingg)所謂耦合合,即兩兩個(gè)對(duì)象象之間聯(lián)聯(lián)系的緊緊密程度度問題:如如何減少少因變化化產(chǎn)生的的影響?解決方案案:分配配職責(zé)以以使耦合合保持在在較低的的水平。低耦合是是構(gòu)建軟軟件最重重要的目目標(biāo)之一一。要注意:我們講講低耦合合,是降降低與不不穩(wěn)定系系統(tǒng)之間間的耦合合度,而而不是那那些穩(wěn)定定的系統(tǒng)統(tǒng),比如如說我們們?cè)贘AAVA編編程過程程中,沒沒有必要要想專門門的辦法法來降低低與JDDK核心心類庫(kù)之之間的耦耦合度,因?yàn)镴JDK核核心類庫(kù)庫(kù)非常穩(wěn)穩(wěn)定

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

8、們們進(jìn)行系系統(tǒng)設(shè)計(jì)計(jì)時(shí),應(yīng)應(yīng)該盡量量要達(dá)到到的目標(biāo)標(biāo)。但是是在某些些情況下下,這些些原則也也許不太太合適。比如在在分布式式系統(tǒng)的的開發(fā)中中。分布布式系統(tǒng)統(tǒng)開發(fā)中中的分布布式對(duì)象象之間的的互相調(diào)調(diào)用,可可能會(huì)跨跨越網(wǎng)絡(luò)絡(luò),跨網(wǎng)網(wǎng)絡(luò)調(diào)用用會(huì)導(dǎo)致致系統(tǒng)性性能的下下降,為為了提高高性能,所以必必須尋找找某種手手段來降降低跨網(wǎng)網(wǎng)絡(luò)調(diào)用用的次數(shù)數(shù)??刂破鳎–onntroolleer)問題:在在UI層層下首先先接收和和協(xié)調(diào)(“控制”)系統(tǒng)統(tǒng)操作的的對(duì)象是是什么?解決方案案:把職職責(zé)分配配給能代代表下列列選擇之之一的對(duì)對(duì)象:代表整個(gè)個(gè)“系統(tǒng)”、“根對(duì)象象”(外觀觀控制器器)。 - 一般用用Faadee模式來來

9、實(shí)現(xiàn)代表發(fā)生生系統(tǒng)操操作的用用例場(chǎng)景景(用例例控制器器)。 - 如果使使用Faaadde來實(shí)實(shí)現(xiàn)一個(gè)個(gè)外觀控控制器,會(huì)使得得這個(gè)控控制器非非常臃腫腫,那么么可以考考慮采用用用例控控制器。舉例:比如說,“導(dǎo)入組組織機(jī)構(gòu)構(gòu)的數(shù)據(jù)據(jù)”用例,要要求能夠夠在界面面上上傳傳兩個(gè)EExceel文件件,一個(gè)個(gè)Exccel是是部門信信息,一一個(gè)Exxcell是人員員信息。那么在在實(shí)現(xiàn)這這個(gè)用例例的時(shí)候候,UII層在接接收到數(shù)數(shù)據(jù)之后后,應(yīng)該該將業(yè)務(wù)務(wù)邏輯統(tǒng)統(tǒng)一交給給一個(gè)業(yè)業(yè)務(wù)邏輯輯處理對(duì)對(duì)象來完完成。很很顯然,這個(gè)業(yè)業(yè)務(wù)邏輯輯對(duì)象,需要調(diào)調(diào)度Exxcell處理相相關(guān)的對(duì)對(duì)象、人人員信息息處理相相關(guān)的對(duì)對(duì)象、部部

10、門信息息處理相相關(guān)的對(duì)對(duì)象等來來完成這這個(gè)導(dǎo)入入數(shù)據(jù)的的業(yè)務(wù)。此業(yè)務(wù)務(wù)邏輯對(duì)對(duì)象就是是用例控控制器。要注意:MVCC中的CC,并不不是我們們這里的的控制器器。因?yàn)闉镸VCC中的CC處于UUI層,而不是是業(yè)務(wù)邏邏輯層。多態(tài)(PPolyymorrphiism)問題:如如何處理理基于類類型的選選擇?如如何創(chuàng)建建可插拔拔的軟件件構(gòu)件?解決方案案:當(dāng)相相關(guān)選擇擇或行為為隨類型型(類)有所不不同時(shí),使用多多態(tài)操作作為變化化的行為為類型分分配職責(zé)責(zé)。不要測(cè)試試對(duì)象的的類型,也不要要使用條條件邏輯輯來執(zhí)行行基于類類型的不不同選擇擇。純虛構(gòu)(Purre FFabrricaatioon)問題:當(dāng)當(dāng)你并不不想違背背

11、高內(nèi)聚聚和低耦耦合或其其它目標(biāo)標(biāo),但是是基于專專家模式式所提供供的方案案又不合合適時(shí),哪些對(duì)對(duì)象應(yīng)該該承擔(dān)這這一職責(zé)責(zé)?(很很多情況況下,只只對(duì)領(lǐng)域域?qū)ο蠓址峙渎氊?zé)責(zé)會(huì)導(dǎo)致致不良內(nèi)內(nèi)聚或耦耦合,或或者降低低復(fù)用潛潛力)解決方案案:對(duì)人為制制造的類類分配一一組高內(nèi)內(nèi)聚的職職責(zé),該該類并不不代表問問題領(lǐng)域域的概念念虛構(gòu)構(gòu)的事物物,用以以支持高高內(nèi)聚,低耦合合和復(fù)用用。所有GOOF設(shè)計(jì)計(jì)模式(或其它它模式)都是純純虛構(gòu)。間接性(Inddireectiion)問題:為為了避免免兩個(gè)或或多個(gè)事事物之間間的直接接耦合,應(yīng)該如如何分配配職責(zé)?如何使使對(duì)象解解耦合,以支持持低耦合合并提供供復(fù)用性性潛力?解決方

12、案案:將職職責(zé)分配配給中介介對(duì)象,避免它它們之間間的直接接耦合。中介實(shí)實(shí)現(xiàn)了間間接性。大量GOOF模式式,如適適配器、外觀等等等都是是間接性性的體現(xiàn)現(xiàn)。防止變異異(Prroteecteed VVariiatiion)問題:如如何設(shè)計(jì)計(jì)對(duì)象、子系統(tǒng)統(tǒng)和系統(tǒng)統(tǒng),使其其內(nèi)部的的變化或或不穩(wěn)定定性不會(huì)會(huì)對(duì)其它它元素產(chǎn)產(chǎn)生不良良影響?解決方案案:識(shí)別別預(yù)計(jì)變變化或不不穩(wěn)定之之處,分分配職責(zé)責(zé)用以在在這些變變化之外外創(chuàng)建穩(wěn)穩(wěn)定接口口。幾乎所有有的軟件件或架構(gòu)構(gòu)設(shè)計(jì)技技巧,都都是防止止變異的的特例,比如封封裝、多多態(tài)、接接口、虛虛擬機(jī)、配置文文件等等等等等!OOD原原則單一職責(zé)責(zé)原則(SRPP)就一個(gè)類類而

13、言,應(yīng)該僅僅有一個(gè)個(gè)引起它它變化的的原因。開放-封封閉原則則(OCCP)軟件實(shí)體體(類、模塊、函數(shù)等等等)應(yīng)應(yīng)該是可可以擴(kuò)展展的,但但是不可可修改的的。對(duì)于擴(kuò)展展是開放放的這意味著著模塊的的行為是是可以擴(kuò)擴(kuò)展的。當(dāng)應(yīng)用用的需求求改變時(shí)時(shí),我們們可以對(duì)對(duì)模塊進(jìn)進(jìn)行擴(kuò)展展,使其其具有滿滿足那些些改變的的新行為為。對(duì)于更改改是封閉閉的對(duì)模塊的的行為進(jìn)進(jìn)行擴(kuò)展展時(shí),不不必改動(dòng)動(dòng)模塊的的源代碼碼或者二二進(jìn)制代代碼。OCP背背后的主主要機(jī)制制是抽象象與多態(tài)態(tài)!Liskkov替替換原則則(LSSP)子類型必必須能夠夠替換掉掉它們的的基類型型。簡(jiǎn)單的例例子:違反LSSP原則則的例子子publlicvvoidd

14、 saaysoometthinng(LLangguagge llan)Sttrinng ttemppStrr = ;if(llan insstannceoof CChinnesee)ttemppStrr = 中文文;if(llan insstannceoof Enngliish)ttemppStrr =英文;Syysteem.oout.priintlln(現(xiàn)在你你學(xué)習(xí)的的語言是是:+temmpSttr);因?yàn)槿绻麄鬟f到到sayysommethhingg方法中中的Laanguuagee是一個(gè)個(gè)Jappaneese對(duì)對(duì)象時(shí),它將無無法處理理!要讓它符符合LSSP也非非常簡(jiǎn)單單:publlicaa

15、bsttracctcllasss Laanguuagee publlicaabsttracct SStriing toSStriing();publliccclasss CChinnesee exteendss LaanguuageeOveerriidepubllic Strringg tooStrringg() retuurn中文;publliccclasss EEngllishh exxtenndsLLangguaggeOveerriidepubllic Strringg tooStrringg() retuurn英語;publlicvvoidd saaysoometthinng(LLangguagge llan)Syyst

溫馨提示

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

評(píng)論

0/150

提交評(píng)論