仿真軟件技術(shù) 課件 第5章- 仿真軟件常用設(shè)計(jì)模式:結(jié)構(gòu)與行為型模式-20240223-final_第1頁
仿真軟件技術(shù) 課件 第5章- 仿真軟件常用設(shè)計(jì)模式:結(jié)構(gòu)與行為型模式-20240223-final_第2頁
仿真軟件技術(shù) 課件 第5章- 仿真軟件常用設(shè)計(jì)模式:結(jié)構(gòu)與行為型模式-20240223-final_第3頁
仿真軟件技術(shù) 課件 第5章- 仿真軟件常用設(shè)計(jì)模式:結(jié)構(gòu)與行為型模式-20240223-final_第4頁
仿真軟件技術(shù) 課件 第5章- 仿真軟件常用設(shè)計(jì)模式:結(jié)構(gòu)與行為型模式-20240223-final_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

課前回顧軟件設(shè)計(jì)模式ErichGamma,RichardHelm,RalphJohnson

&JohnVlissides(Addison-Wesley,1995)DesignPatterns23種不同的設(shè)計(jì)模式解決方案已在軟件工程領(lǐng)域得到廣泛應(yīng)用課前回顧創(chuàng)建模式CreationalPatterns關(guān)注點(diǎn):怎樣創(chuàng)建對(duì)象特點(diǎn):將對(duì)象的創(chuàng)建與使用分離,降低軟件系統(tǒng)的耦合度,使用者不用關(guān)注對(duì)象的創(chuàng)建細(xì)節(jié)。仿真軟件常用:單例模式(Singleton)工廠方法(FactoryMethod)生成器(Builder)課前思考學(xué)習(xí)經(jīng)驗(yàn)問題:如何解耦對(duì)象的接口與實(shí)現(xiàn)?如何處理對(duì)象之間的動(dòng)態(tài)交互?仿真軟件技術(shù)第5章仿真軟件常用設(shè)計(jì)模式SimulationSoftwareTechnology第5章仿真軟件常用設(shè)計(jì)模式5.1軟件設(shè)計(jì)模式概述5.2仿真軟件常用設(shè)計(jì)模式創(chuàng)建模式CreationalPatterns結(jié)構(gòu)模式StructuralPatterns行為模式BehavioralPatterns本講內(nèi)容第5章仿真軟件常用設(shè)計(jì)模式①能正確使用組合、適配器等結(jié)構(gòu)型模式②能使用命令、模板方法等行為型模式

②本講目標(biāo)第5章仿真軟件常用設(shè)計(jì)模式5.1軟件設(shè)計(jì)模式概述5.2仿真軟件常用設(shè)計(jì)模式創(chuàng)建模式CreationalPatterns結(jié)構(gòu)模式StructuralPatterns行為模式BehavioralPatterns本講內(nèi)容第5章仿真軟件常用設(shè)計(jì)模式

5.2.2結(jié)構(gòu)型模式StructuralPatterns描述如何將類或者對(duì)象結(jié)合在一起形成更大的結(jié)構(gòu)以適應(yīng)更高層次需求。關(guān)注類和對(duì)象的組合,繼承的概念被用來組合接口和定義組合對(duì)象獲得新功能,通過組合類或者對(duì)象產(chǎn)生更大結(jié)構(gòu)。仿真軟件常用模式:組合模式(Composite)適配器模式(Adapter)組合模式Composite意圖將對(duì)象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)用戶可以無差異地對(duì)待單個(gè)對(duì)象或?qū)ο蠼M合使用場景如果想表示對(duì)象的部分-整體層次結(jié)構(gòu)希望忽略單個(gè)對(duì)象和組合對(duì)象的差異例子DEVS:原子組件、耦合組件組合模式Composite

解決方案請(qǐng)換一種視角畫出組合模式結(jié)構(gòu)圖?ClientComponentOperation()Add(Component)Remove(Component)GetChild(int)LeafOperation()CompositeOperation()Add(Component)Remove(Component)GetChild(int)forallginchildreng.Operation();childrenaCompositeaLeafaLeafaCompositeaLeafaLeafaLeafaLeaf組合模式Composite效果應(yīng)用調(diào)用簡單能夠比較容易地加入新的組件可能導(dǎo)致設(shè)計(jì)過于通用某些操作并不是對(duì)每個(gè)類都有意義有些組合可能需要包含特定的組件ClientComponentOperation()Add(Component)Remove(Component)GetChild(int)LeafOperation()CompositeOperation()Add(Component)Remove(Component)GetChild(int)forallginchildreng.Operation();children適配器模式Adaptor意圖將一個(gè)類的接口裝換成客戶所需要的而另一個(gè)接口作為兩個(gè)不兼容接口之間的橋梁使用場景某段代碼要移植到新的環(huán)境,但是新環(huán)境的接口要求是現(xiàn)環(huán)境不能滿足的。例子美國電壓110V,中國220V在LINUX上運(yùn)行WINDOWS程序適配器模式Adaptor

解決方案ClientTarget+Request():voidAdapter+Request():voidAdaptee+SpecificRequest():voidadaptee->SpecificRequest()適配器模式Adaptor

效果通過適配器,客戶端可以調(diào)用同一接口,實(shí)現(xiàn)不同的功能,因而,對(duì)客戶端來說是透明的。復(fù)用了現(xiàn)存的類,解決了現(xiàn)類和復(fù)用環(huán)境要求不一致的問題將目標(biāo)類和適配器解耦,通過引入一個(gè)適配器類重用現(xiàn)有的適配者類,而無需修改原有代碼。關(guān)于適配器模式,說法錯(cuò)誤的是()適配器繼承或依賴已有的對(duì)象,實(shí)現(xiàn)想要的目標(biāo)接口主要解決在軟件系統(tǒng)中,常常要將一些"現(xiàn)存的對(duì)象"放到新的環(huán)境中,而新環(huán)境要求的接口是現(xiàn)對(duì)象不能滿足的定義了算法家族,分別封裝起來,讓他們之間可以相互替換。將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。ABCD提交單選題1分第5章仿真軟件常用設(shè)計(jì)模式5.1軟件設(shè)計(jì)模式概述5.2仿真軟件常用設(shè)計(jì)模式創(chuàng)建模式CreationalPatterns結(jié)構(gòu)模式StructuralPattern行為模式BehavioralPatterns

本講內(nèi)容第5章仿真軟件常用設(shè)計(jì)模式

5.2.3行為模式BehavioralPatterns在不同的對(duì)象之間劃分責(zé)任和算法的抽象化。劃分類和對(duì)象的職責(zé),并研究系統(tǒng)在運(yùn)行時(shí)實(shí)例對(duì)象之間的交互。仿真軟件常用模式:命令模式(Command)觀察者模式(Observer)模板方法(TemplateMethod)觀察者模式Observer觀察者模式(Observer)偵查到艦艇,發(fā)射導(dǎo)彈攻擊發(fā)現(xiàn)導(dǎo)彈來襲,發(fā)射攔截彈進(jìn)行攔截?zé)o人機(jī)編隊(duì)艦艇觀察者模式Observer意圖定義對(duì)象之間一對(duì)多關(guān)系:當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生變化時(shí),所有依賴于它的對(duì)象會(huì)收到通知并進(jìn)行自動(dòng)更新。使用場景觀察者模式Observer

解決方案Subject-observers:vector<Observer>-Attach(Observer):void-Detach(Observer):void+Notify():voidforalloinobservers{o->Update();}ConcreteSubject-subjectState+GetState():void+SetState():void+Notify():voidObserver+Update():voidConcreteObserver-observerState+Update():voidreturnsubjectStateobserverState=subject->GetState()Notify()Update()GetState()Update()GetState()aConcreteSubjectaConcreteObserveranotherConcreteObserverSetState()觀察者模式Observer效果觀察者和被觀察者是松耦合的建立了一套觸發(fā)機(jī)制(消息機(jī)制)效率問題如果一個(gè)被觀察者有很多觀察者的話,通知所有的觀察者開銷很大。循環(huán)依賴,會(huì)導(dǎo)致崩潰觀察者模式適用于當(dāng)一個(gè)抽象模型存在兩個(gè)方面,其中一方面依賴于另一方面,將這二者封裝在獨(dú)立的對(duì)象中以使它們可以各自獨(dú)立地改變和復(fù)用。當(dāng)對(duì)一個(gè)對(duì)象的改變需要同時(shí)改變其它對(duì)象,而不知道具體有多少對(duì)象有待改變時(shí)。當(dāng)一個(gè)對(duì)象必須通知其它對(duì)象,而它又不能假定其它對(duì)象是誰。一個(gè)對(duì)象結(jié)構(gòu)包含多類對(duì)象,它們有不同的接口,而想對(duì)這些對(duì)象實(shí)施一些依賴于其具體類的操作ABCD提交多選題3分命令模式Command意圖將一次請(qǐng)求封裝為一個(gè)對(duì)象。因此,可以通過參數(shù)化的對(duì)象來實(shí)現(xiàn)不同的請(qǐng)求。使用場景需要程序模擬時(shí)間的演化需要對(duì)行為進(jìn)行記錄、撤銷或重做例子仿真對(duì)象之間發(fā)消息,用事件隊(duì)列管理消息命令模式CommandClientInvokerReceiver+Action()要求該命令執(zhí)行這個(gè)請(qǐng)求知道如何實(shí)施與執(zhí)行一個(gè)請(qǐng)求相關(guān)的操作,任何類型都可能作為一個(gè)接收者-receiver:ReceiverConcreteCommand+Execute()<<interface>>Command+Execute()將一個(gè)接收者對(duì)象綁定于一個(gè)動(dòng)作,調(diào)用接收者相應(yīng)的操作,以實(shí)現(xiàn)Execute用來聲明執(zhí)行操作的接口命令模式(Command),將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可撤銷的操作命令模式Command

解決方案ClientCommandExecute()ReceiverAction()ConcreteCommandExecute()receiver->Action();stateInvokerreceiveranInvokeraReceiveraClientaCommandnewCommand(aReceiver)StoreCommand(aCommand)Execute()Action()命令模式Command效果類間解耦:調(diào)用者與接收者之間沒有任何依賴關(guān)系,調(diào)用者實(shí)現(xiàn)功能時(shí)只需調(diào)用Command抽象類的execute方法,不需要了解到底是哪個(gè)接收者執(zhí)行可擴(kuò)展性:新的命令可以很容易地添加到系統(tǒng)中Command是抽象基類,新的命令類可以派生execute(),undo()andredo()可作為虛函數(shù)可能導(dǎo)致有過多的命令類模板方法TemplateMethod意圖定義了算法的骨架,將具體實(shí)現(xiàn)推遲到子類中。不改變算法結(jié)構(gòu),重定義算法的某些特定步驟。使用場景由算法來實(shí)現(xiàn)一個(gè)不變的行為,讓子類實(shí)現(xiàn)可改變的行為將子類中的公用行為抽取出來例子標(biāo)準(zhǔn)庫中的排序算法模板方法TemplateMethod

解決方案抽象類AbstractClass+TemplateMethod():void+SpecificMethod():void+abstractMethod1():void+abstractMethod2():void客戶類TemplateMethodPattern-tm:AbstractClass+Tmain(String[]args):voidtm=newConcreteClass();tm.TemplateMethod();具體子類ConcreteClass+abstractMethod1():void+abstractMethod2():voidpublicvoidTemplateMethod()//模板方法{SpecificMethod();abstractMethod1();abstractMethod2();}模板方法TemplateMethod效果封裝不變部分,擴(kuò)展可變部分不變部分封裝到父類,可變部分通過繼承來擴(kuò)展。行為由父類控制,子類實(shí)現(xiàn)基本方法是由子類實(shí)現(xiàn)的,因此子類可以通過擴(kuò)展的方式增加相應(yīng)的功能,符合開-閉原則。不同的實(shí)現(xiàn)都需要定義一個(gè)子類,系統(tǒng)更加龐大。反向的控制結(jié)構(gòu),它降低了代碼的可閱讀性。如果父類添加新的抽象方法,所有子類都需修改。課程小結(jié)仿真軟件常用設(shè)計(jì)模式創(chuàng)建模式CreationalPatterns結(jié)構(gòu)模式StructuralPatterns

組合方法

適配器行為模式BehavioralPatterns

觀察者模式

命令模式模板方法課后習(xí)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論