通用職責(zé)分配軟件模式_第1頁
通用職責(zé)分配軟件模式_第2頁
通用職責(zé)分配軟件模式_第3頁
通用職責(zé)分配軟件模式_第4頁
通用職責(zé)分配軟件模式_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Patterns of assigning responsibilitiesGRASP:職責(zé)分配模式:職責(zé)分配模式南昌航空大學(xué)計(jì)算機(jī)學(xué)院v交互圖是面向?qū)ο蠓治龊驮O(shè)計(jì)中要獲得的最重要交互圖是面向?qū)ο蠓治龊驮O(shè)計(jì)中要獲得的最重要的產(chǎn)品之一的產(chǎn)品之一v在建立交互圖的過程中,能夠熟練的進(jìn)行職責(zé)的在建立交互圖的過程中,能夠熟練的進(jìn)行職責(zé)的分配是非常重要的分配是非常重要的v花費(fèi)在交互圖上的時(shí)間和代價(jià)應(yīng)該在項(xiàng)目開發(fā)中花費(fèi)在交互圖上的時(shí)間和代價(jià)應(yīng)該在項(xiàng)目開發(fā)中占很大比重占很大比重v編纂成型的設(shè)計(jì)模式、設(shè)計(jì)原則和慣用用法可以編纂成型的設(shè)計(jì)模式、設(shè)計(jì)原則和慣用用法可以用于改進(jìn)交互圖的設(shè)計(jì)質(zhì)量用于改進(jìn)交互圖的設(shè)計(jì)質(zhì)量

2、南昌航空大學(xué)計(jì)算機(jī)學(xué)院職責(zé)和方法職責(zé)和方法v職責(zé):一個(gè)類或者類型的契約或者義務(wù)職責(zé):一個(gè)類或者類型的契約或者義務(wù)F“知道知道”型職責(zé)型職責(zé)F自己知道的私有的、封裝了數(shù)據(jù)自己知道的私有的、封裝了數(shù)據(jù)F知道與自己相關(guān)聯(lián)的對(duì)象信息知道與自己相關(guān)聯(lián)的對(duì)象信息F知道自己派生出來或者計(jì)算出來的事物知道自己派生出來或者計(jì)算出來的事物F“做做”型職責(zé)型職責(zé)F自己完成某件任務(wù)自己完成某件任務(wù)F發(fā)起其他對(duì)象執(zhí)行動(dòng)作發(fā)起其他對(duì)象執(zhí)行動(dòng)作F控制和協(xié)調(diào)其他對(duì)象內(nèi)的活動(dòng)控制和協(xié)調(diào)其他對(duì)象內(nèi)的活動(dòng)南昌航空大學(xué)計(jì)算機(jī)學(xué)院舉例舉例v一個(gè)一個(gè)sale要負(fù)責(zé)打印它自身的信息要負(fù)責(zé)打印它自身的信息“做型做型”v一個(gè)一個(gè)sale有知道

3、它的交易日期的責(zé)任有知道它的交易日期的責(zé)任“知道知道型型”,可以通過概念模型得出,可以通過概念模型得出v職責(zé)的履行是通過方法來實(shí)現(xiàn)的,例如職責(zé)的履行是通過方法來實(shí)現(xiàn)的,例如print南昌航空大學(xué)計(jì)算機(jī)學(xué)院模式的概念模式的概念v模式:是一個(gè)被命名的問題模式:是一個(gè)被命名的問題-解決方案對(duì),它可以解決方案對(duì),它可以被應(yīng)用到新的語境中,并提供了一些處理新情況被應(yīng)用到新的語境中,并提供了一些處理新情況的建議的建議 模式通常不包含新的設(shè)計(jì)思想模式通常不包含新的設(shè)計(jì)思想 模式帶有名稱模式帶有名稱 模式被命名后有利于增進(jìn)交流模式被命名后有利于增進(jìn)交流v“一個(gè)人的模式可能是另一個(gè)人用來建筑的磚塊一個(gè)人的模式可

4、能是另一個(gè)人用來建筑的磚塊”南昌航空大學(xué)計(jì)算機(jī)學(xué)院GRASP模式模式vGeneral Responsibility Assignment Software Pattern 專家(專家(Expert) 創(chuàng)建者(創(chuàng)建者(Creator) 高聚合度或高內(nèi)聚(高聚合度或高內(nèi)聚(High Cohesion) 低耦合度或低耦合(低耦合度或低耦合(Low Coupling) 控制者(控制者(Controller)南昌航空大學(xué)計(jì)算機(jī)學(xué)院一、專家模式一、專家模式vSale的總額的總額南昌航空大學(xué)計(jì)算機(jī)學(xué)院類類職責(zé)職責(zé)SaleSalesLineItemProductSpecification知道銷售項(xiàng)總額知道銷售

5、項(xiàng)總額知道銷售項(xiàng)記錄子金額知道銷售項(xiàng)記錄子金額知道商品價(jià)格知道商品價(jià)格按照專家模式能夠得出這樣的設(shè)計(jì):一個(gè)軟件對(duì)按照專家模式能夠得出這樣的設(shè)計(jì):一個(gè)軟件對(duì)象所執(zhí)行的操作通常是這個(gè)軟件對(duì)象在現(xiàn)實(shí)世界象所執(zhí)行的操作通常是這個(gè)軟件對(duì)象在現(xiàn)實(shí)世界中所代表的事物所能進(jìn)行的操作。中所代表的事物所能進(jìn)行的操作。南昌航空大學(xué)計(jì)算機(jī)學(xué)院“專家專家”模式的優(yōu)點(diǎn)模式的優(yōu)點(diǎn)v低耦合度低耦合度v高聚合度高聚合度南昌航空大學(xué)計(jì)算機(jī)學(xué)院二、創(chuàng)建者二、創(chuàng)建者v將創(chuàng)建一個(gè)類將創(chuàng)建一個(gè)類A 的實(shí)例的職責(zé)指派給類的實(shí)例的職責(zé)指派給類B的實(shí)例,的實(shí)例,如果下列條件滿足的話:如果下列條件滿足的話:B聚集了聚集了A對(duì)象對(duì)象B包含了包含了

6、A對(duì)象對(duì)象B記錄了記錄了A對(duì)象的實(shí)例對(duì)象的實(shí)例B要經(jīng)常使用要經(jīng)常使用A對(duì)象對(duì)象當(dāng)當(dāng)A的實(shí)例被創(chuàng)建時(shí),的實(shí)例被創(chuàng)建時(shí),B具有傳遞給具有傳遞給A的的初始化數(shù)據(jù)的職責(zé)(也就是說初始化數(shù)據(jù)的職責(zé)(也就是說B是創(chuàng)建是創(chuàng)建 A的實(shí)例這項(xiàng)任務(wù)的信息專家。)的實(shí)例這項(xiàng)任務(wù)的信息專家。) 那么那么B是是A對(duì)象的創(chuàng)建者。對(duì)象的創(chuàng)建者。南昌航空大學(xué)計(jì)算機(jī)學(xué)院舉例舉例v誰負(fù)責(zé)創(chuàng)建誰負(fù)責(zé)創(chuàng)建SalesLineItem的實(shí)例?的實(shí)例?南昌航空大學(xué)計(jì)算機(jī)學(xué)院:SalesLineItem:Sale1: Create(Quantity)南昌航空大學(xué)計(jì)算機(jī)學(xué)院創(chuàng)建者模式的優(yōu)點(diǎn)創(chuàng)建者模式的優(yōu)點(diǎn)v低耦合度低耦合度v整體整體部分(聚合

7、或組合),支持構(gòu)件的封裝部分(聚合或組合),支持構(gòu)件的封裝南昌航空大學(xué)計(jì)算機(jī)學(xué)院三、低耦合度三、低耦合度v耦合度:是一個(gè)類與其他類關(guān)聯(lián)、知道其他類的耦合度:是一個(gè)類與其他類關(guān)聯(lián)、知道其他類的信息或者依賴其他類的強(qiáng)弱程度的度量。信息或者依賴其他類的強(qiáng)弱程度的度量。:Payment:Sale:Post1: create()2: addPayment()南昌航空大學(xué)計(jì)算機(jī)學(xué)院vSecond solution:Payment:Sale1: Create():Post2: makePayment()南昌航空大學(xué)計(jì)算機(jī)學(xué)院低耦合度的優(yōu)點(diǎn)低耦合度的優(yōu)點(diǎn)v低耦合度支持更獨(dú)立的類的設(shè)計(jì),這樣的設(shè)計(jì)能低耦合度支持

8、更獨(dú)立的類的設(shè)計(jì),這樣的設(shè)計(jì)能夠減少修改設(shè)計(jì)方案所帶來的影響,更好的支持夠減少修改設(shè)計(jì)方案所帶來的影響,更好的支持重用,這些都可以提高軟件生產(chǎn)效率。但不能脫重用,這些都可以提高軟件生產(chǎn)效率。但不能脫離其他模式來孤立地考慮低耦合度。離其他模式來孤立地考慮低耦合度。v優(yōu)點(diǎn):優(yōu)點(diǎn): 不受到其他構(gòu)件變更的影響不受到其他構(gòu)件變更的影響 容易隔離考察和理解容易隔離考察和理解 易于重用易于重用南昌航空大學(xué)計(jì)算機(jī)學(xué)院四、高聚合性四、高聚合性v內(nèi)聚度:是對(duì)一個(gè)類中的各個(gè)職責(zé)之間相關(guān)程度內(nèi)聚度:是對(duì)一個(gè)類中的各個(gè)職責(zé)之間相關(guān)程度和集中程度的度量。和集中程度的度量。:Payment:Sale:Post1: crea

9、te()2: addPayment()南昌航空大學(xué)計(jì)算機(jī)學(xué)院:Payment:Sale1: Create():Post2: makePayment()南昌航空大學(xué)計(jì)算機(jī)學(xué)院高聚合度的優(yōu)點(diǎn)高聚合度的優(yōu)點(diǎn)v增加了設(shè)計(jì)的清晰性和易于理解增加了設(shè)計(jì)的清晰性和易于理解v簡化了軟件的升級(jí)和維護(hù)工作簡化了軟件的升級(jí)和維護(hù)工作v通常能夠支持低耦合度通常能夠支持低耦合度v細(xì)粒度、高相關(guān)的功能模塊還為日后可能的軟件細(xì)粒度、高相關(guān)的功能模塊還為日后可能的軟件重用提供了支持重用提供了支持南昌航空大學(xué)計(jì)算機(jī)學(xué)院五、控制者五、控制者v將處理系統(tǒng)事件消息的職責(zé)分派給代表下列事物將處理系統(tǒng)事件消息的職責(zé)分派給代表下列事物的類

10、:的類: 代表整個(gè)代表整個(gè)“系統(tǒng)系統(tǒng)”的類的類 代表整個(gè)企業(yè)或組織的類代表整個(gè)企業(yè)或組織的類 代表真實(shí)世界中參與職責(zé)的主動(dòng)對(duì)象類代表真實(shí)世界中參與職責(zé)的主動(dòng)對(duì)象類 代表一個(gè)用況中所有事件的人工處理者類代表一個(gè)用況中所有事件的人工處理者類v使用同一個(gè)控制者類處理同一個(gè)用況中的所有的使用同一個(gè)控制者類處理同一個(gè)用況中的所有的事件事件南昌航空大學(xué)計(jì)算機(jī)學(xué)院控制者模式優(yōu)點(diǎn)控制者模式優(yōu)點(diǎn)v增加軟件構(gòu)件的可重用性增加軟件構(gòu)件的可重用性v理解用例的狀態(tài)理解用例的狀態(tài)GRASP模式模式 續(xù)續(xù)南昌航空大學(xué)計(jì)算機(jī)學(xué)院前5個(gè)GRASP(General Responsibility Assignment Softwa

11、re Patterns)模式v專家專家v創(chuàng)建者創(chuàng)建者v高聚合度高聚合度v低耦合度低耦合度v控制者控制者南昌航空大學(xué)計(jì)算機(jī)學(xué)院最后的最后的4個(gè)個(gè)GRASP模式是:模式是: v多態(tài)多態(tài)v純虛構(gòu)純虛構(gòu)v中介者中介者v不要和陌生人說話不要和陌生人說話 南昌航空大學(xué)計(jì)算機(jī)學(xué)院6 6 多態(tài)多態(tài) v解決方案解決方案v當(dāng)相關(guān)的可選擇的方法或行為隨著類型變化時(shí),當(dāng)相關(guān)的可選擇的方法或行為隨著類型變化時(shí),將行為的職責(zé)將行為的職責(zé)使用多態(tài)(使用多態(tài)(Polymorphism)操作操作分配給那些行為變化的類型。分配給那些行為變化的類型。v不要測試對(duì)象的類型和使用條件邏輯來執(zhí)行基于不要測試對(duì)象的類型和使用條件邏輯來執(zhí)行

12、基于類型的變化的可選擇的方法。類型的變化的可選擇的方法。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院如何處理基于類型的選擇?如何處理基于類型的選擇? v基于類型的選擇。條件的變更是編程中的一個(gè)基基于類型的選擇。條件的變更是編程中的一個(gè)基本主題。如果程序中用本主題。如果程序中用if-then-else或或case語語句來設(shè)計(jì)條件邏輯,那么當(dāng)一個(gè)新的變更出現(xiàn)時(shí),句來設(shè)計(jì)條件邏輯,那么當(dāng)一個(gè)新的變更出現(xiàn)時(shí),程序需要修改程序需要修改case邏輯。這種方法使得采用新的邏輯。這種方法使得采用新的變更來擴(kuò)展程序很困難,因?yàn)槌绦蛑型枰拮兏鼇頂U(kuò)展程序很困難,因?yàn)槌绦蛑型枰薷亩鄠€(gè)地方改多個(gè)地方條件邏輯存在的任何地方。條件

13、邏輯存在的任何地方。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院舉例:舉例:POSTv由于授權(quán)的行為隨著支付的種類由于授權(quán)的行為隨著支付的種類現(xiàn)金、信用卡現(xiàn)金、信用卡或支票或支票變化,因此應(yīng)該用多態(tài)性為每種支付類變化,因此應(yīng)該用多態(tài)性為每種支付類型 分 配 職 責(zé) , 這 可 以 用 一 個(gè) 多 態(tài) 的型 分 配 職 責(zé) , 這 可 以 用 一 個(gè) 多 態(tài) 的authorize(授權(quán)授權(quán))操作來實(shí)現(xiàn)。每個(gè)操作來實(shí)現(xiàn)。每個(gè)authorize操作的實(shí)現(xiàn)將不同。操作的實(shí)現(xiàn)將不同。南昌航空大學(xué)計(jì)算機(jī)學(xué)院南昌航空大學(xué)計(jì)算機(jī)學(xué)院v和專家模式一樣,多態(tài)的使用是模式和專家模式一樣,多態(tài)的使用是模式“自己做自己做”的核心思想之一。

14、的核心思想之一。v如果專家可以被刻畫成最重要的基本的戰(zhàn)術(shù)模式,如果專家可以被刻畫成最重要的基本的戰(zhàn)術(shù)模式,那么在面向?qū)ο笤O(shè)計(jì)中的多態(tài)就是最重要的的基那么在面向?qū)ο笤O(shè)計(jì)中的多態(tài)就是最重要的的基本戰(zhàn)略模式。本戰(zhàn)略模式。v一個(gè)基于多態(tài)來分配職責(zé)的設(shè)計(jì)可以很容易地被一個(gè)基于多態(tài)來分配職責(zé)的設(shè)計(jì)可以很容易地被擴(kuò)展以處理新的變化。擴(kuò)展以處理新的變化。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院優(yōu)點(diǎn):優(yōu)點(diǎn): v為不期而來的新變化所需要的將來的擴(kuò)展是很容為不期而來的新變化所需要的將來的擴(kuò)展是很容易被添加的。易被添加的。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院7 7 純虛構(gòu)純虛構(gòu) v 給一個(gè)人造類分配一組高度內(nèi)聚的職責(zé)。人造類不代表問給一個(gè)人造類

15、分配一組高度內(nèi)聚的職責(zé)。人造類不代表問題領(lǐng)域的任何事物題領(lǐng)域的任何事物它只是虛構(gòu)的事物,為了支持高度的它只是虛構(gòu)的事物,為了支持高度的內(nèi)聚性、低耦合和重用。(不到迫不得已不這樣做)內(nèi)聚性、低耦合和重用。(不到迫不得已不這樣做) v 面向?qū)ο笤O(shè)計(jì)的特色是通過實(shí)現(xiàn)表現(xiàn)為現(xiàn)實(shí)世界問題領(lǐng)域面向?qū)ο笤O(shè)計(jì)的特色是通過實(shí)現(xiàn)表現(xiàn)為現(xiàn)實(shí)世界問題領(lǐng)域中的概念的軟件類描述。然而,有很多這樣的情形:職責(zé)中的概念的軟件類描述。然而,有很多這樣的情形:職責(zé)分配給領(lǐng)域中的類,這導(dǎo)致低聚合度、高耦合度或低重用分配給領(lǐng)域中的類,這導(dǎo)致低聚合度、高耦合度或低重用性方面回產(chǎn)生問題。性方面回產(chǎn)生問題。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院舉例:舉

16、例: v 假設(shè)要支持在一個(gè)關(guān)系數(shù)據(jù)庫中保存假設(shè)要支持在一個(gè)關(guān)系數(shù)據(jù)庫中保存Sale實(shí)例,根據(jù)專實(shí)例,根據(jù)專家模式,有理由將這種職責(zé)分配給家模式,有理由將這種職責(zé)分配給Sale類本身,但是問類本身,但是問題來了:題來了: 這個(gè)任務(wù)需要一個(gè)相對(duì)大量的支持面向數(shù)據(jù)庫的操作,這個(gè)任務(wù)需要一個(gè)相對(duì)大量的支持面向數(shù)據(jù)庫的操作,沒有任何一個(gè)操作與銷售概念有關(guān),因此沒有任何一個(gè)操作與銷售概念有關(guān),因此Sale類變得類變得無內(nèi)聚性。無內(nèi)聚性。 Sale類必須同關(guān)系數(shù)據(jù)庫的接口相連接,于是它的耦類必須同關(guān)系數(shù)據(jù)庫的接口相連接,于是它的耦合多了起來。合多了起來。 在一個(gè)關(guān)系數(shù)據(jù)庫中保存對(duì)象對(duì)于許多需要提供這種在一個(gè)

17、關(guān)系數(shù)據(jù)庫中保存對(duì)象對(duì)于許多需要提供這種支持的類來說是一個(gè)非常普通的任務(wù)。將這些職責(zé)放支持的類來說是一個(gè)非常普通的任務(wù)。將這些職責(zé)放在在Sale類是假定在其他類中做同樣的事情將很難重用類是假定在其他類中做同樣的事情將很難重用構(gòu)件或者會(huì)出現(xiàn)大量的重復(fù)。構(gòu)件或者會(huì)出現(xiàn)大量的重復(fù)。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院v一個(gè)合理的解決方案是虛構(gòu)一個(gè)新類,這個(gè)類僅一個(gè)合理的解決方案是虛構(gòu)一個(gè)新類,這個(gè)類僅僅負(fù)責(zé)在某種持久存儲(chǔ)介質(zhì)中存取對(duì)象。稱這個(gè)僅負(fù)責(zé)在某種持久存儲(chǔ)介質(zhì)中存取對(duì)象。稱這個(gè)類為類為PersistentStorageBroker(持久存儲(chǔ)(持久存儲(chǔ)代理)。代理)。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院vSale類保持

18、了良好的設(shè)計(jì),具有高內(nèi)聚和低耦合。類保持了良好的設(shè)計(jì),具有高內(nèi)聚和低耦合。vPersistentStorageBroker本身相對(duì)內(nèi)聚,本身相對(duì)內(nèi)聚,具有在一個(gè)持久的存儲(chǔ)介質(zhì)中保存對(duì)象的唯一用具有在一個(gè)持久的存儲(chǔ)介質(zhì)中保存對(duì)象的唯一用途。途。vPersistentStorageBroker類是一個(gè)非常通類是一個(gè)非常通用和可重用的類用和可重用的類 優(yōu)點(diǎn)優(yōu)點(diǎn)南昌航空大學(xué)計(jì)算機(jī)學(xué)院v一個(gè)純虛構(gòu)必須被設(shè)計(jì)成具有好的重用性,這可一個(gè)純虛構(gòu)必須被設(shè)計(jì)成具有好的重用性,這可以通過保證其職責(zé)是很小和內(nèi)聚的來實(shí)現(xiàn)。這些以通過保證其職責(zé)是很小和內(nèi)聚的來實(shí)現(xiàn)。這些類通常具有一組細(xì)粒度的職責(zé)。類通常具有一組細(xì)粒度的職

19、責(zé)。v一個(gè)純虛構(gòu)通常基于相關(guān)功能來劃分,因此它是一個(gè)純虛構(gòu)通?;谙嚓P(guān)功能來劃分,因此它是一種基于功能為中心的對(duì)象。一種基于功能為中心的對(duì)象。v一個(gè)純虛構(gòu)通常被考慮成一個(gè)體系結(jié)構(gòu)中高層面一個(gè)純虛構(gòu)通常被考慮成一個(gè)體系結(jié)構(gòu)中高層面向?qū)ο蠓?wù)層的一部分。向?qū)ο蠓?wù)層的一部分。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院優(yōu)點(diǎn)優(yōu)點(diǎn) v因?yàn)槁氊?zé)被分解為一個(gè)細(xì)粒度的類,這個(gè)類關(guān)注因?yàn)槁氊?zé)被分解為一個(gè)細(xì)粒度的類,這個(gè)類關(guān)注相關(guān)任務(wù)的一個(gè)特定集合,所以支持高內(nèi)聚度。相關(guān)任務(wù)的一個(gè)特定集合,所以支持高內(nèi)聚度。v重用性的增加是因?yàn)樘峁┝思?xì)粒度的純虛構(gòu)類,重用性的增加是因?yàn)樘峁┝思?xì)粒度的純虛構(gòu)類,這些類的職責(zé)在其他應(yīng)用中有實(shí)用性。這些

20、類的職責(zé)在其他應(yīng)用中有實(shí)用性。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院潛在問題潛在問題 v好的面向?qū)ο笤O(shè)計(jì)是以對(duì)象為中心而不是以功能好的面向?qū)ο笤O(shè)計(jì)是以對(duì)象為中心而不是以功能為中心,而這個(gè)思想可能被遺棄了,因?yàn)榧兊奶摓橹行模@個(gè)思想可能被遺棄了,因?yàn)榧兊奶摌?gòu)物通常是基于相關(guān)的功能性來劃分(按功能集構(gòu)物通常是基于相關(guān)的功能性來劃分(按功能集合來生成類)。若這種做法被濫用,創(chuàng)建純虛構(gòu)合來生成類)。若這種做法被濫用,創(chuàng)建純虛構(gòu)將導(dǎo)致一個(gè)面向功能或面向過程的設(shè)計(jì),并且這將導(dǎo)致一個(gè)面向功能或面向過程的設(shè)計(jì),并且這個(gè)設(shè)計(jì)還用面向?qū)ο蟮恼Z言來實(shí)現(xiàn)。個(gè)設(shè)計(jì)還用面向?qū)ο蟮恼Z言來實(shí)現(xiàn)。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院8 8 中介者中介

21、者 v將職責(zé)分配給一個(gè)中間對(duì)象以便在其他構(gòu)件或服將職責(zé)分配給一個(gè)中間對(duì)象以便在其他構(gòu)件或服務(wù)之間進(jìn)行仲裁,這樣這些構(gòu)件或服務(wù)沒有被直務(wù)之間進(jìn)行仲裁,這樣這些構(gòu)件或服務(wù)沒有被直接耦合。接耦合。v這個(gè)中間對(duì)象(這個(gè)中間對(duì)象(intermediary)在其他構(gòu)件或)在其他構(gòu)件或服務(wù)之間創(chuàng)建一個(gè)中介者服務(wù)之間創(chuàng)建一個(gè)中介者(indirection)。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院舉例 :PersistenStoragBroker v這是通過引入這是通過引入PersistentStorageBroker類類將將Sale類從關(guān)系數(shù)據(jù)庫服務(wù)中分離。類從關(guān)系數(shù)據(jù)庫服務(wù)中分離。v PersistentStorageB

22、roker作為作為Sale類和系類和系統(tǒng)數(shù)據(jù)庫的中介者。統(tǒng)數(shù)據(jù)庫的中介者。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院舉例 : Modem 假設(shè):假設(shè):v一個(gè)一個(gè)POST應(yīng)用需要操縱一個(gè)調(diào)制解調(diào)器以發(fā)送應(yīng)用需要操縱一個(gè)調(diào)制解調(diào)器以發(fā)送信用卡支付請求。信用卡支付請求。v操作系統(tǒng)提供了一個(gè)低層的函數(shù)調(diào)用接口操作系統(tǒng)提供了一個(gè)低層的函數(shù)調(diào)用接口API以以支持這樣做支持這樣做v一個(gè)被稱為一個(gè)被稱為CreditAuthorizationService的的類負(fù)責(zé)同調(diào)制解調(diào)器對(duì)話。類負(fù)責(zé)同調(diào)制解調(diào)器對(duì)話。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院設(shè)備代理設(shè)備代理南昌航空大學(xué)計(jì)算機(jī)學(xué)院9 9 不要和陌生人說話不要和陌生人說話 v分配職責(zé)給一個(gè)客戶

23、端的直接對(duì)象以使它與一個(gè)分配職責(zé)給一個(gè)客戶端的直接對(duì)象以使它與一個(gè)間接對(duì)象進(jìn)行協(xié)作,這樣客戶端無須知道這個(gè)間間接對(duì)象進(jìn)行協(xié)作,這樣客戶端無須知道這個(gè)間接對(duì)象。接對(duì)象。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院消息只能發(fā)往下面的對(duì)象消息只能發(fā)往下面的對(duì)象 v這個(gè)對(duì)象本身這個(gè)對(duì)象本身v這個(gè)方法中的一個(gè)參數(shù)這個(gè)方法中的一個(gè)參數(shù)v這個(gè)對(duì)象本身的一個(gè)屬性這個(gè)對(duì)象本身的一個(gè)屬性v這個(gè)對(duì)象本身屬性集合中的一個(gè)元素這個(gè)對(duì)象本身屬性集合中的一個(gè)元素v在這個(gè)方法內(nèi)創(chuàng)建的對(duì)象在這個(gè)方法內(nèi)創(chuàng)建的對(duì)象南昌航空大學(xué)計(jì)算機(jī)學(xué)院v目的是為了避免將一個(gè)客戶端同間接對(duì)象發(fā)生信目的是為了避免將一個(gè)客戶端同間接對(duì)象發(fā)生信息耦合和避免直接對(duì)象的內(nèi)部描述

24、。直接對(duì)象是息耦合和避免直接對(duì)象的內(nèi)部描述。直接對(duì)象是一個(gè)客戶端的一個(gè)客戶端的“??统?汀?,間接對(duì)象是,間接對(duì)象是“陌生人陌生人”,并且一個(gè)客戶端只需要同??蛯?duì)話而不需要同陌并且一個(gè)客戶端只需要同常客對(duì)話而不需要同陌生人對(duì)話。生人對(duì)話。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院:Payment:Sale1: Create():Post2: makePayment()南昌航空大學(xué)計(jì)算機(jī)學(xué)院多態(tài)多態(tài) v一個(gè)支付項(xiàng)自己授權(quán)自己是真正的面向?qū)ο笤O(shè)計(jì)一個(gè)支付項(xiàng)自己授權(quán)自己是真正的面向?qū)ο笤O(shè)計(jì)思想思想“自己做自己做”模式。由于多種支付類型,因此模式。由于多種支付類型,因此使用了多態(tài)模式,以便每個(gè)支付類型都可以對(duì)自使用了多態(tài)

25、模式,以便每個(gè)支付類型都可以對(duì)自身進(jìn)行授權(quán)服務(wù)。身進(jìn)行授權(quán)服務(wù)。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院南昌航空大學(xué)計(jì)算機(jī)學(xué)院v一個(gè)一個(gè)Sale實(shí)例化一個(gè)實(shí)例化一個(gè)CreditPayment或一個(gè)或一個(gè)CheckPayment,并告訴它們對(duì)自身進(jìn)行授權(quán)服務(wù)。,并告訴它們對(duì)自身進(jìn)行授權(quán)服務(wù)。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院南昌航空大學(xué)計(jì)算機(jī)學(xué)院獨(dú)身獨(dú)身 v 當(dāng)一個(gè)當(dāng)一個(gè)CreditPayment收到一個(gè)收到一個(gè)Authorsize消息時(shí),消息時(shí),它需要發(fā)送一條消息給它需要發(fā)送一條消息給Store以找出同什么信用卡授權(quán)服以找出同什么信用卡授權(quán)服務(wù)機(jī)構(gòu)通信。(授權(quán)服務(wù)方面,務(wù)機(jī)構(gòu)通信。(授權(quán)服務(wù)方面,Store是一個(gè)簡單的

26、信息是一個(gè)簡單的信息專家)。專家)。v 但是這里有一個(gè)可見性問題:新創(chuàng)建的但是這里有一個(gè)可見性問題:新創(chuàng)建的CreditPayment沒有訪問沒有訪問Store實(shí)例的權(quán)限。一個(gè)解決方案是將實(shí)例的權(quán)限。一個(gè)解決方案是將Store從從POST傳遞下去(作為一個(gè)參數(shù)),并把傳遞下去(作為一個(gè)參數(shù)),并把Store作為作為CreditPayment的一個(gè)屬性。這樣的一個(gè)屬性。這樣Store對(duì)對(duì)CreditPayment有屬性可見性。(不方便)有屬性可見性。(不方便) 51南昌航空大學(xué)計(jì)算機(jī)學(xué)院使用獨(dú)身模式使用獨(dú)身模式 v有時(shí)需要支持全局的可見性或?qū)σ粋€(gè)類的一個(gè)單有時(shí)需要支持全局的可見性或?qū)σ粋€(gè)類的一個(gè)

27、單獨(dú)實(shí)例的一個(gè)單獨(dú)的訪問點(diǎn),而不是某些其他形獨(dú)實(shí)例的一個(gè)單獨(dú)的訪問點(diǎn),而不是某些其他形式的可見性。式的可見性。v語境語境/問題:一個(gè)類恰好允許有一個(gè)實(shí)例問題:一個(gè)類恰好允許有一個(gè)實(shí)例這就是這就是一個(gè)一個(gè)“獨(dú)身獨(dú)身”。v解決方案:定義返回獨(dú)身的一個(gè)類的方法或非成解決方案:定義返回獨(dú)身的一個(gè)類的方法或非成員函數(shù)(員函數(shù)(C+) 南昌航空大學(xué)計(jì)算機(jī)學(xué)院南昌航空大學(xué)計(jì)算機(jī)學(xué)院南昌航空大學(xué)計(jì)算機(jī)學(xué)院遠(yuǎn)程代理和代理遠(yuǎn)程代理和代理 v 系統(tǒng)必須同外部的服務(wù)通信。在這種情況下,遠(yuǎn)程代理模系統(tǒng)必須同外部的服務(wù)通信。在這種情況下,遠(yuǎn)程代理模式建議創(chuàng)建一個(gè)本地的代表外部服務(wù)的軟件類并讓他負(fù)責(zé)式建議創(chuàng)建一個(gè)本地的代表

28、外部服務(wù)的軟件類并讓他負(fù)責(zé)同實(shí)際的服務(wù)通信。同實(shí)際的服務(wù)通信。v 遠(yuǎn)程代理模式是普通代理模式的特殊例子,建議用一個(gè)替遠(yuǎn)程代理模式是普通代理模式的特殊例子,建議用一個(gè)替代品在特定的語境中代替一個(gè)構(gòu)件(對(duì)象、服務(wù)器、設(shè)備代品在特定的語境中代替一個(gè)構(gòu)件(對(duì)象、服務(wù)器、設(shè)備驅(qū)動(dòng)、驅(qū)動(dòng)、DLL等)。等)。v 在在POST系統(tǒng)中,需要找出應(yīng)使用哪種授權(quán)服務(wù),然后基系統(tǒng)中,需要找出應(yīng)使用哪種授權(quán)服務(wù),然后基于遠(yuǎn)程代理,讓它同實(shí)際的服務(wù)機(jī)構(gòu)通信。于遠(yuǎn)程代理,讓它同實(shí)際的服務(wù)機(jī)構(gòu)通信。南昌航空大學(xué)計(jì)算機(jī)學(xué)院南昌航空大學(xué)計(jì)算機(jī)學(xué)院v一旦找到正確的遠(yuǎn)程代理,它將負(fù)責(zé)完成授權(quán)一旦找到正確的遠(yuǎn)程代理,它將負(fù)責(zé)完成授權(quán)服

29、務(wù)。服務(wù)。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院vCreditAuthorsizeService遠(yuǎn)程代理需要遠(yuǎn)程代理需要發(fā)送一個(gè)請求消息并接收一個(gè)應(yīng)答,發(fā)送一個(gè)請求消息并接收一個(gè)應(yīng)答, 南昌航空大學(xué)計(jì)算機(jī)學(xué)院命令模式v在在AuthorsizeService發(fā)送了請求后,它想自發(fā)送了請求后,它想自己發(fā)送一條己發(fā)送一條receiveReply(接收應(yīng)答)消息并(接收應(yīng)答)消息并等待一條消息的到來。等待一條消息的到來。v當(dāng)接收到消息時(shí),這條串格式消息被還原成一個(gè)當(dāng)接收到消息時(shí),這條串格式消息被還原成一個(gè)CreditPaymentApprovalReply或一個(gè)或一個(gè)CreditPaymentDenialReply實(shí)例,這取決實(shí)例,這取決于授權(quán)服務(wù)代碼。于授權(quán)服務(wù)代碼。 南昌航空大學(xué)計(jì)算機(jī)學(xué)院執(zhí)行過程如何繼續(xù)下去? v命令模式建議每個(gè)應(yīng)答對(duì)象代表一種命令或動(dòng)作命令模式建議每個(gè)應(yīng)答對(duì)象代表一種命令或動(dòng)作請求,并且每個(gè)對(duì)象都必須基于多態(tài)模式執(zhí)行自請求,并且每個(gè)對(duì)象都必須基于多態(tài)模式執(zhí)行自己本身。己本身。v多種請求或命令可以被一個(gè)對(duì)象或系統(tǒng)接收。減多種請求或命令可以被一個(gè)對(duì)象或系統(tǒng)接收。減少接收者處理命令的職責(zé),通過增加新的命令來少接收者處理

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論