體系結(jié)構(gòu)簡要grasp和設(shè)計模式_第1頁
體系結(jié)構(gòu)簡要grasp和設(shè)計模式_第2頁
體系結(jié)構(gòu)簡要grasp和設(shè)計模式_第3頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、GRASP:是General Responsibility Assignment Software Patterns的縮寫,這些模式不是設(shè)計模式,而是對象設(shè)計的基本原則,關(guān)注對象設(shè)計最重要的方面分配職責(zé)給類,并不強(qiáng)調(diào)體系結(jié)構(gòu)的設(shè)計;專家模式(expert)最基本的問題誰負(fù)責(zé)得知某些信息;解決方法將這個職責(zé)分配給需要信息來完成自己職責(zé)的類;維護(hù)信息封裝,低耦合高內(nèi)聚,可能使類變得很復(fù)雜誰都負(fù)責(zé)自己的信息的統(tǒng)計工作,也就是,你只負(fù)責(zé)你本身擁有的信息的處理,只有對自己了解的信息,你才是專家,才能擁有職責(zé)。Sale 負(fù)責(zé)總價錢SalesLineItem 負(fù)責(zé)每一個Line的總價錢ProductSpec

2、ification 負(fù)責(zé)每一個產(chǎn)品的價格創(chuàng)建者模式(creator)問題誰負(fù)責(zé)創(chuàng)建某類的新實例;解決方法賦予B創(chuàng)建A的職責(zé)如果(B聚合A,B包含A,B記錄A的實例,B密切使用A,B有創(chuàng)建A的初始數(shù)據(jù)),其中第一條或第二條最好;類擁有創(chuàng)建需要引用的對象的職責(zé)來減少Connection以降低耦合,自己創(chuàng)建實例可以避免依賴于其他類為條目創(chuàng)建實例誰擁有創(chuàng)建的信息,誰包含被創(chuàng)建對象,誰統(tǒng)計被創(chuàng)建對象的信息,誰負(fù)責(zé)創(chuàng)建對象。Sale負(fù)責(zé)創(chuàng)建SalesLineItem,需要數(shù)量作為參數(shù),因為只有Sale知道需要多少個數(shù)量的Item。低耦合(low Coupling)問題低依賴度、高復(fù)用性;解決方案分配職責(zé)保

3、持低耦合;類易于維護(hù)和復(fù)用,變更本地化一個類型A和類型B之間的耦合關(guān)系有如下幾種形式:B是A的屬性A中的一個方法里面使用到B類型,或者以B類型作為參數(shù)B是A的子類,或者間接的子類A是一個接口,而B實現(xiàn)了A三個類Payment ,Post , SaleSale負(fù)責(zé)創(chuàng)建payment,因為sale知道總價錢。高內(nèi)聚(high Cohesion)問題使得復(fù)雜性在可管理的范圍內(nèi);解決方案分配職責(zé)保持高內(nèi)聚,一個功能領(lǐng)域的中等規(guī)模職責(zé),與其他類協(xié)作完成任務(wù);類易于維護(hù)和理解,增益低耦合,職責(zé)粒度適中故而為復(fù)用提供支持;內(nèi)聚種類:非常低內(nèi)聚:一個類負(fù)責(zé)不同功能區(qū)不同的事情低內(nèi)聚:一個類負(fù)責(zé)相同功能區(qū)里面不

4、同的事情高內(nèi)聚:一個類負(fù)責(zé)相同功能區(qū)里面一些職責(zé),并和其他類一起完成該功能。Rule of thumb(首要原則)控制器 (controller)問題誰負(fù)責(zé)處理系統(tǒng)事件;解決方案如果程序接收不是從圖形接口來的外部源事件,添加一個事件類來解耦事件源和處理事件的對象;將處理系統(tǒng)事件消息的職責(zé)分配給類(業(yè)務(wù)或者全局組織facade controller,全局“系統(tǒng)”facade controller,領(lǐng)域中執(zhí)行工作的活動體,人工類型(純虛構(gòu))use case controller);增加了復(fù)用的可能性,將外部事件源和內(nèi)部事件處理的類型和行為獨立開,論證用例的狀態(tài),確保系統(tǒng)操作以合法的順序出現(xiàn),或能論

5、證用例中活動和操作的現(xiàn)狀態(tài);使用Controller對象保證外部事件源和內(nèi)部事件處理的類型和行為獨立開,擁有更多的職責(zé)controller對象可能高耦合低內(nèi)聚指的是事件控制器,對于一個非圖形界面事件,最好能夠有專門的控制器來針對它做出處理。對于一個entereItem()的事件來說,需要有一個專門的控制器,接受事件,然后處理事件。多態(tài)性(Polymorphism) 問題誰處理基于類型的多個選擇;解決方案基于類型有多種行為選擇時,使用多態(tài)方法調(diào)用來選擇行為而不是使用if語句來測試類型;比顯示選擇邏輯更簡單和可靠,更易于增加附加行為,但增加了設(shè)計中類的數(shù)量,也使得代碼更難跟蹤多用多態(tài)來實現(xiàn)行為判斷

6、,最好不要用if語句。純虛構(gòu)(Pure Fabrication) 問題如何不違背高內(nèi)聚低耦合;解決方案將高內(nèi)聚職責(zé)結(jié)合分配給在問題域中沒有對用的人工類,只有狀態(tài)或只有行為,從而支持高內(nèi)聚低耦合和復(fù)用;由于職責(zé)被分配給關(guān)注一個非常特化的相關(guān)任務(wù)集的類而得到高耦合,適中粒度的純虛構(gòu)類增加復(fù)用的可能性;例子,操作數(shù)據(jù)庫的類,適用場景分離表示層和模型層、分離平臺(facilities)和模型層、分離復(fù)雜行為或復(fù)雜數(shù)據(jù)結(jié)構(gòu)指的是,要實現(xiàn)高內(nèi)聚,必須將功能單一化,雖然有時候class滿足專家模式,但是,對于一些大型的,需要多次重用的方法,需要單獨提取出來作為一個類,這樣能夠增加重用性。間接性(Indire

7、ction)問題如何避免直接耦合、解耦對象以支持低耦合和高復(fù)用可能性;解決方案將職責(zé)分配給一個中間對象來協(xié)調(diào)其他組件或服務(wù),使他們不會直接耦合;與可變性解耦,提升復(fù)用有時候需要用間接的耦合來代替直接的耦合,對于上一個例子,通過建立一個中間類別來解開sale和database之間的耦合,把直接耦合轉(zhuǎn)化為間接耦合。防止變異(Protected Variations)問題如何設(shè)計對象、子系統(tǒng)和系統(tǒng)以便這些元素的差異性或不穩(wěn)定性不會對其他元素產(chǎn)生非預(yù)期的影響;解決方案識別可預(yù)期的差異點和不穩(wěn)定點,分配職責(zé)以創(chuàng)建一個穩(wěn)定的接口;信息隱藏,數(shù)據(jù)驅(qū)動(配置文件),服務(wù)lookup(運行時注冊),interp

8、reter驅(qū)動(泛化模塊),映射或元數(shù)據(jù)級別設(shè)計(組件代替),統(tǒng)一存?。▍f(xié)議依賴),LSP(多態(tài)),Demeter法則(限制交互路徑)面向接口編程迭代器模式(Iterator)通過一個迭代器來訪問容器。這樣可以做到多態(tài),因為對于不同的容器,他們的迭代器是相同,所以,你可以指定一個迭代器的接口,即可以訪問所有容器的數(shù)據(jù)而不需要具體知道是哪個容器。;代理模式(Proxy)如果訪問真實的主題有危險,或者有某些禁忌的話,可以使用代理模式,它通過將真實的主題和代理的主題共同實現(xiàn)一個父類來達(dá)到目的,父類中只有一個方法,供給客戶端使用。在代理中可以使用preRequest和postRequest。原型模式(

9、Prototype)通過給出一個原型對象來指明所要對象的類型,然后用復(fù)制這個原型對象的辦法創(chuàng)建出更多相同類型對象。依賴倒置DIP 高層模塊不應(yīng)該依賴于底層模塊,二者都應(yīng)該依賴于抽象抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象調(diào)停著模式(Mediator)同樣是一個中介的意思,也就是說,對于多個對象之間的復(fù)雜聯(lián)系,通過一個中介來將他們所有的行為聯(lián)系起來。僑界模式(Bridge)橋接模式最大的特點在于將2個不同方面的組合通過繼承和接口的方式將他們組合起來,也就是我們數(shù)學(xué)里面的排列組合;例如:A B 兩個方式寫入數(shù)據(jù),而C D兩個方式寫入不同的平在而傳統(tǒng)的方式在與通過單方面的技能來實現(xiàn),而橋接模式則能夠

10、實現(xiàn)AC,BC,AD,BD之間的任意組合。外觀模式(Facade)也可以叫前端模式就是在一個子系統(tǒng)或者系統(tǒng)中(可能包含了很多種方法),通過建立一個類,來將這些你需要的方法的使用順序,調(diào)用順序組合起來,也就是一個中間類別的意思,同樣是功能的抽象化。Facade模式主要適用于以下幾種情況:不需要使用一個復(fù)雜系統(tǒng)的所有功能,而且可以創(chuàng)建一個新的類,包含訪問系統(tǒng)的所有規(guī)則。如果只需要使用系統(tǒng)的部分功能,那么你為新類所創(chuàng)建的API將比原系統(tǒng)的API簡單的多。希望封裝或者隱藏系統(tǒng)原系統(tǒng)。希望使用原系統(tǒng)的功能,而且還希望增加一些新的功能。編寫新類的成本小于所有人學(xué)會使用或者未來維護(hù)原系統(tǒng)上所需的成本開閉原則

11、OCP對拓展開放對修改關(guān)閉也就是說我們在設(shè)計一個類的時候,是不需要修改類本身的代碼就可以進(jìn)行拓展。修飾者模式(Decorator)最主要的特點是代替繼承,實現(xiàn)類的拓展還有就是動態(tài)的添加職責(zé)。適配器模式(adapter)對于類適配器:就是用一個類繼承一個父類,同時實現(xiàn)一個接口對于對象適配器:就是用一個類,他有上一句中父類的屬性,同時實現(xiàn)一個接口。策略模式(Strategy)通過類擁有一個接口的屬性,通過具體不同的實現(xiàn)該接口的類來做不同的事情。共性與可變性找出共性判斷共性中還有那些可變的地方通過一些方法來解決可變性方法如下:If語句是最差的方法策略模式比繼承好觀察者模式(Observer)通過一個存放觀察者的列表,維護(hù)觀察者。然后在需要調(diào)用觀察者的時候在notify鏈表對應(yīng)的觀察者

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論