課件—UML系統(tǒng)建模與設(shè)計(jì)(8)_第1頁(yè)
課件—UML系統(tǒng)建模與設(shè)計(jì)(8)_第2頁(yè)
課件—UML系統(tǒng)建模與設(shè)計(jì)(8)_第3頁(yè)
課件—UML系統(tǒng)建模與設(shè)計(jì)(8)_第4頁(yè)
課件—UML系統(tǒng)建模與設(shè)計(jì)(8)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)1UML系統(tǒng)建模與分析設(shè)計(jì)本章目的:本章目的:l了解設(shè)計(jì)模式的概念了解設(shè)計(jì)模式的概念l掌握設(shè)計(jì)模式的三大分類掌握設(shè)計(jì)模式的三大分類l掌握常用的掌握常用的1111種常的設(shè)計(jì)模式(其中簡(jiǎn)單種常的設(shè)計(jì)模式(其中簡(jiǎn)單 工廠是工廠方法的最初表現(xiàn)形式)工廠是工廠方法的最初表現(xiàn)形式)l了解各設(shè)計(jì)模式的優(yōu)點(diǎn)、不足了解各設(shè)計(jì)模式的優(yōu)點(diǎn)、不足l掌握設(shè)計(jì)模式的使用原則及策略掌握設(shè)計(jì)模式的使用原則及策略第八章第八章 設(shè)計(jì)模式及其應(yīng)用設(shè)計(jì)模式及其應(yīng)用 2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)2UML系統(tǒng)建模與分析設(shè)計(jì)8.1.18.1.1模式和設(shè)計(jì)模式的概念模式和設(shè)計(jì)模式的概念 模

2、式就是解決特定問(wèn)題的經(jīng)驗(yàn),實(shí)質(zhì)上就是軟模式就是解決特定問(wèn)題的經(jīng)驗(yàn),實(shí)質(zhì)上就是軟 件的復(fù)用。件的復(fù)用。8.1 8.1 設(shè)計(jì)模式概述設(shè)計(jì)模式概述8.1.28.1.2設(shè)計(jì)模式的描述設(shè)計(jì)模式的描述 一個(gè)設(shè)計(jì)模式有四個(gè)基本要素:一個(gè)設(shè)計(jì)模式有四個(gè)基本要素:l 模式名稱(模式名稱(pattern namepattern name):描述模式的問(wèn)題、):描述模式的問(wèn)題、 解決方案和效果。解決方案和效果。l 面對(duì)問(wèn)題(面對(duì)問(wèn)題(problemproblem):描述了應(yīng)該在何時(shí)使用):描述了應(yīng)該在何時(shí)使用 模式。模式。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)3UML系統(tǒng)建模與分析設(shè)計(jì) 解決方案(解決方案(sol

3、utionsolution):描述了設(shè)計(jì)的組成成):描述了設(shè)計(jì)的組成成 分,職責(zé)和協(xié)作方式。分,職責(zé)和協(xié)作方式。 l 模式效果(模式效果(consequencesconsequences):描述了模式應(yīng)用):描述了模式應(yīng)用的的 效果及使用模式應(yīng)效果及使用模式應(yīng) 權(quán)衡的問(wèn)題。權(quán)衡的問(wèn)題。8.1.38.1.3設(shè)計(jì)模式的作用和研究意義設(shè)計(jì)模式的作用和研究意義設(shè)計(jì)模式的作用和研究意義:設(shè)計(jì)模式的作用和研究意義:(1 1)優(yōu)化的設(shè)計(jì)經(jīng)驗(yàn)。)優(yōu)化的設(shè)計(jì)經(jīng)驗(yàn)。(2 2)極高的復(fù)用性。)極高的復(fù)用性。(3 3)豐富的表達(dá)能力。)豐富的表達(dá)能力。(4 4)極低的耦合度。)極低的耦合度。 2021-7-8UML系

4、統(tǒng)建模與分析設(shè)計(jì)4UML系統(tǒng)建模與分析設(shè)計(jì)8.2.18.2.1創(chuàng)建型設(shè)計(jì)模式創(chuàng)建型設(shè)計(jì)模式 創(chuàng)建型模式隱藏了對(duì)象創(chuàng)建的具體細(xì)節(jié),使程創(chuàng)建型模式隱藏了對(duì)象創(chuàng)建的具體細(xì)節(jié),使程序代碼不依賴具體的對(duì)象。序代碼不依賴具體的對(duì)象。 創(chuàng)建型類的模式有工廠方法(創(chuàng)建型類的模式有工廠方法(Factory MethodFactory Method)模式;模式; 創(chuàng)建型對(duì)象模式包括抽象工廠(創(chuàng)建型對(duì)象模式包括抽象工廠(Abstract Abstract FactoryFactory)、建造()、建造(BuilderBuilder)、原型()、原型(PrototypePrototype)、)、單例單例 (Singl

5、etonSingleton)四種模式。)四種模式。8.2 8.2 設(shè)計(jì)模式的分類及其相互間關(guān)系設(shè)計(jì)模式的分類及其相互間關(guān)系2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)5UML系統(tǒng)建模與分析設(shè)計(jì)8.2.28.2.2結(jié)構(gòu)型設(shè)計(jì)模式結(jié)構(gòu)型設(shè)計(jì)模式 結(jié)構(gòu)型模式描述類和對(duì)象之間通過(guò)組織形成新結(jié)構(gòu)型模式描述類和對(duì)象之間通過(guò)組織形成新的結(jié)構(gòu),以實(shí)現(xiàn)新的功能。的結(jié)構(gòu),以實(shí)現(xiàn)新的功能。 結(jié)構(gòu)型的類模式采用繼承機(jī)制來(lái)組合類,如適結(jié)構(gòu)型的類模式采用繼承機(jī)制來(lái)組合類,如適配器(配器(AdapterAdapter)類模式;)類模式; 結(jié)構(gòu)型的對(duì)象模式則描述了對(duì)象的組裝方式,結(jié)構(gòu)型的對(duì)象模式則描述了對(duì)象的組裝方式,如適配器(

6、如適配器(AdapterAdapter)對(duì)象模式、橋接()對(duì)象模式、橋接(BridgeBridge)模式、組合(模式、組合(CompositeComposite)模式、裝飾)模式、裝飾(DecoratorDecorator)模式、外觀()模式、外觀(FacadeFacade)模式、享元)模式、享元(FlyweightFlyweight)模式、代理()模式、代理(ProxyProxy)模式等。)模式等。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)6UML系統(tǒng)建模與分析設(shè)計(jì)8.2.38.2.3行為型設(shè)計(jì)模式行為型設(shè)計(jì)模式 行為型設(shè)計(jì)模式描述算法以及對(duì)象之間的任務(wù)行為型設(shè)計(jì)模式描述算法以及對(duì)象之間的任務(wù)

7、(職責(zé))分配及它們之間的通訊模式。(職責(zé))分配及它們之間的通訊模式。 行為型的類模式用繼承方法完成,有模板方法模行為型的類模式用繼承方法完成,有模板方法模式和解釋器模式;式和解釋器模式; 行為型的對(duì)象模式使用對(duì)象復(fù)合方法而不是繼承,行為型的對(duì)象模式使用對(duì)象復(fù)合方法而不是繼承,它描述一組對(duì)象怎樣協(xié)作完成單個(gè)對(duì)象所無(wú)法完成的它描述一組對(duì)象怎樣協(xié)作完成單個(gè)對(duì)象所無(wú)法完成的任務(wù),任務(wù), 如職責(zé)鏈(如職責(zé)鏈(Chain ofReponsibilityChain ofReponsibility)模式、)模式、命令(命令(CommandCommand)模式、迭代器()模式、迭代器(IteratorItera

8、tor)模式、中)模式、中介者(介者(MediatorMediator)模式、備忘錄()模式、備忘錄(MementoMemento)模式、觀)模式、觀察者(察者(ObserverObserver)模式、狀態(tài)()模式、狀態(tài)(StateState)模式、策略)模式、策略(StrategyStrategy)模式、訪問(wèn)者()模式、訪問(wèn)者(VisitorVisitor)模式等。)模式等。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)7UML系統(tǒng)建模與分析設(shè)計(jì)8.3.18.3.1工廠模式(工廠模式(Factory ModelFactory Model) 1 1簡(jiǎn)單工廠(簡(jiǎn)單工廠(Simple FactorySi

9、mple Factory)模式)模式 類的創(chuàng)建模式,又稱靜態(tài)工廠方法模式。由一個(gè)工類的創(chuàng)建模式,又稱靜態(tài)工廠方法模式。由一個(gè)工廠類根據(jù)傳入的參數(shù)決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。廠類根據(jù)傳入的參數(shù)決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。涉及到角色:涉及到角色:(1 1)工廠類角色()工廠類角色(CreatorCreator):由一個(gè)具體類來(lái)實(shí)現(xiàn)。):由一個(gè)具體類來(lái)實(shí)現(xiàn)。(2 2)抽象產(chǎn)品角色()抽象產(chǎn)品角色(ProductProduct):可以用一個(gè)接口或):可以用一個(gè)接口或 抽象類來(lái)實(shí)現(xiàn)。抽象類來(lái)實(shí)現(xiàn)。(3 3)具體產(chǎn)品角色()具體產(chǎn)品角色(ConcreteProductConcreteProduct):

10、由一個(gè)具):由一個(gè)具 體類來(lái)實(shí)現(xiàn)。體類來(lái)實(shí)現(xiàn)。8.3 8.3 經(jīng)典設(shè)計(jì)模式經(jīng)典設(shè)計(jì)模式 2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)8UML系統(tǒng)建模與分析設(shè)計(jì)簡(jiǎn)單工廠模式的優(yōu)缺點(diǎn):(1)簡(jiǎn)單。(2)增加新的產(chǎn)品時(shí),要修改工廠類,違反了面 向?qū)ο笤O(shè)計(jì)的基本原則。(3)工廠類一旦不能正常工作,整個(gè)程序都會(huì)受 到影響。(4)靜態(tài)結(jié)構(gòu)無(wú)法形成基于繼承的層次結(jié)構(gòu)。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)9UML系統(tǒng)建模與分析設(shè)計(jì)2 2工廠方法(工廠方法(Factory MethodFactory Method)模式)模式 又稱為多態(tài)性工廠模式。又稱為多態(tài)性工廠模式。參與的角色有:參與的角色有:(1 1)抽象

11、工廠接口()抽象工廠接口(CreatorCreator):創(chuàng)建對(duì)象的工):創(chuàng)建對(duì)象的工 廠類必須實(shí)施這個(gè)接口的實(shí)現(xiàn)。廠類必須實(shí)施這個(gè)接口的實(shí)現(xiàn)。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)10UML系統(tǒng)建模與分析設(shè)計(jì)(2 2)具體工廠類()具體工廠類(Concrete CreatorConcrete Creator):用于):用于 創(chuàng)建產(chǎn)品實(shí)例的那樣一些類。創(chuàng)建產(chǎn)品實(shí)例的那樣一些類。(3 3)產(chǎn)品()產(chǎn)品(ProductProduct):是工廠方法模式所創(chuàng)):是工廠方法模式所創(chuàng) 建的對(duì)象的父類,或它們共同擁有的接口。建的對(duì)象的父類,或它們共同擁有的接口。(4 4)具體產(chǎn)品()具體產(chǎn)品(Concre

12、te ProductConcrete Product):是工廠):是工廠 方法模式所創(chuàng)建的任何對(duì)象所屬的類。方法模式所創(chuàng)建的任何對(duì)象所屬的類。工廠方法模式和簡(jiǎn)單工廠模式的區(qū)別是:工廠方法模式和簡(jiǎn)單工廠模式的區(qū)別是:l 工廠方法模式的核心是一個(gè)抽象工廠類;工廠方法模式的核心是一個(gè)抽象工廠類; 簡(jiǎn)單工廠模式把核心放在一個(gè)具體類上。簡(jiǎn)單工廠模式把核心放在一個(gè)具體類上。l 簡(jiǎn)單工廠模式是由工廠方法模式退化而來(lái)。簡(jiǎn)單工廠模式是由工廠方法模式退化而來(lái)。 2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)11UML系統(tǒng)建模與分析設(shè)計(jì)3 3抽象工廠(抽象工廠(Abstract FactoryAbstract Facto

13、ry)模式)模式 實(shí)際使用的機(jī)會(huì)很少。是向客戶提供一個(gè)接口,實(shí)際使用的機(jī)會(huì)很少。是向客戶提供一個(gè)接口,使得客戶可以在不必指定產(chǎn)品的具體類型的情況下,使得客戶可以在不必指定產(chǎn)品的具體類型的情況下,創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象。創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象。 2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)12UML系統(tǒng)建模與分析設(shè)計(jì)(2 2)具體工廠類()具體工廠類(Conrete FactoryConrete Factory):應(yīng)用):應(yīng)用 程序直接調(diào)用來(lái)創(chuàng)建產(chǎn)品實(shí)例的那些類。程序直接調(diào)用來(lái)創(chuàng)建產(chǎn)品實(shí)例的那些類。(3 3)抽象產(chǎn)品類()抽象產(chǎn)品類(Abstract ProductAbstract Prod

14、uct):抽象):抽象 工廠模式所創(chuàng)立的對(duì)象的父類或共同的接口。工廠模式所創(chuàng)立的對(duì)象的父類或共同的接口。(4 4)具體產(chǎn)品類()具體產(chǎn)品類(Concrete ProductConcrete Product):是抽象):是抽象 工廠模式所創(chuàng)立的任何對(duì)象所屬的類。工廠模式所創(chuàng)立的任何對(duì)象所屬的類。 抽象工廠模式有抽象工廠模式有4 4個(gè)角色:個(gè)角色:(1 1)抽象工廠類()抽象工廠類(AbstractFactoryAbstractFactory):創(chuàng)建對(duì)):創(chuàng)建對(duì) 象的工廠類必須實(shí)現(xiàn)接口,或繼承該類。象的工廠類必須實(shí)現(xiàn)接口,或繼承該類。 2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)13UML系統(tǒng)建模與分

15、析設(shè)計(jì)可以使用抽象工廠模式的條件:可以使用抽象工廠模式的條件:(1 1)一個(gè)系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表)一個(gè)系統(tǒng)要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表 示時(shí);示時(shí);(2 2)一個(gè)系統(tǒng)要由多個(gè)產(chǎn)品系列中的一個(gè)來(lái)配置時(shí);)一個(gè)系統(tǒng)要由多個(gè)產(chǎn)品系列中的一個(gè)來(lái)配置時(shí);(3 3)當(dāng)你要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對(duì)象的設(shè)計(jì)以便)當(dāng)你要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對(duì)象的設(shè)計(jì)以便 進(jìn)行聯(lián)合使用時(shí);進(jìn)行聯(lián)合使用時(shí);(4 4)當(dāng)你提供一個(gè)產(chǎn)品類庫(kù),而只想顯示它們的接)當(dāng)你提供一個(gè)產(chǎn)品類庫(kù),而只想顯示它們的接 口而不是實(shí)現(xiàn)時(shí)??诙皇菍?shí)現(xiàn)時(shí)。實(shí)現(xiàn)抽象工廠模式時(shí)注意:實(shí)現(xiàn)抽象工廠模式時(shí)注意:l 最好將抽象工廠設(shè)計(jì)為單例模式;最

16、好將抽象工廠設(shè)計(jì)為單例模式;l 創(chuàng)建產(chǎn)品時(shí),最好為每一個(gè)產(chǎn)品定義一個(gè)工廠方法;創(chuàng)建產(chǎn)品時(shí),最好為每一個(gè)產(chǎn)品定義一個(gè)工廠方法;l 將抽象工廠定義為可擴(kuò)展的。將抽象工廠定義為可擴(kuò)展的。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)14UML系統(tǒng)建模與分析設(shè)計(jì)8.3.28.3.2適配器模式(適配器模式(AdapterAdapter) 適配器模式可以將某個(gè)類的接口轉(zhuǎn)換成客戶希適配器模式可以將某個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)類的接口。望的另外一個(gè)類的接口??梢允褂眠m配器模式的條件:可以使用適配器模式的條件:(1 1)想要使用一個(gè)已經(jīng)存在的類,而它的接口不)想要使用一個(gè)已經(jīng)存在的類,而它的接口不 符合需求;

17、符合需求;(2 2)創(chuàng)建一個(gè)可以復(fù)用的類,該類可以與其他不)創(chuàng)建一個(gè)可以復(fù)用的類,該類可以與其他不 相關(guān)的類或不可預(yù)見的類協(xié)同工作;相關(guān)的類或不可預(yù)見的類協(xié)同工作;(3 3)對(duì)象適配器可以適配父類的接口。)對(duì)象適配器可以適配父類的接口。 2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)15UML系統(tǒng)建模與分析設(shè)計(jì)2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)16UML系統(tǒng)建模與分析設(shè)計(jì)實(shí)際應(yīng)用適配器模式時(shí)要考慮的因素實(shí)際應(yīng)用適配器模式時(shí)要考慮的因素: :l 適配器適配器AdapterAdapter的匹配程度。的匹配程度。l 可插入的適配器可插入的適配器AdapterAdapter。l 使用雙向適配器,對(duì)所有

18、客戶都提供透明操作。使用雙向適配器,對(duì)所有客戶都提供透明操作。l 與適配器模式相關(guān)的模式有代理模式等。與適配器模式相關(guān)的模式有代理模式等。 2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)17UML系統(tǒng)建模與分析設(shè)計(jì)8.3.38.3.3命令模式(命令模式(CommandCommand) 將一個(gè)請(qǐng)求封裝為對(duì)象,可用不同的請(qǐng)求對(duì)客將一個(gè)請(qǐng)求封裝為對(duì)象,可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化、對(duì)請(qǐng)求進(jìn)行排隊(duì)、記錄請(qǐng)求日志和戶進(jìn)行參數(shù)化、對(duì)請(qǐng)求進(jìn)行排隊(duì)、記錄請(qǐng)求日志和支持可撤銷的操作等。支持可撤銷的操作等。使用命令模式的條件:使用命令模式的條件:(1 1)抽象出待執(zhí)行的動(dòng)作以參數(shù)化某個(gè)對(duì)象時(shí)。)抽象出待執(zhí)行的動(dòng)作以參

19、數(shù)化某個(gè)對(duì)象時(shí)。(2 2)在不同的時(shí)刻指定、排列和執(zhí)行請(qǐng)求時(shí)。)在不同的時(shí)刻指定、排列和執(zhí)行請(qǐng)求時(shí)。(3 3)支持取消操作時(shí)。)支持取消操作時(shí)。(4 4)支持修改日志,當(dāng)系統(tǒng)崩潰時(shí),根據(jù)已有的)支持修改日志,當(dāng)系統(tǒng)崩潰時(shí),根據(jù)已有的 日志修改可以被重做一遍。日志修改可以被重做一遍。(5 5)用構(gòu)建在原語(yǔ)操作上的高層操作構(gòu)造一個(gè)系)用構(gòu)建在原語(yǔ)操作上的高層操作構(gòu)造一個(gè)系 統(tǒng)。統(tǒng)。 2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)18UML系統(tǒng)建模與分析設(shè)計(jì)參與模式運(yùn)行的角色有:參與模式運(yùn)行的角色有:l 抽象類抽象類CommandCommand聲明執(zhí)行操作的接口。聲明執(zhí)行操作的接口。l 具體命令類具體命令

20、類ConcreteCommandConcreteCommand將接收者對(duì)象將接收者對(duì)象ReceiverReceiver 綁定于一個(gè)動(dòng)作,同時(shí)調(diào)用接收者相應(yīng)的操作,以綁定于一個(gè)動(dòng)作,同時(shí)調(diào)用接收者相應(yīng)的操作,以 實(shí)現(xiàn)實(shí)現(xiàn)ExecuteExecute。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)19UML系統(tǒng)建模與分析設(shè)計(jì)客戶類客戶類ClientClient創(chuàng)建一個(gè)具體命令對(duì)象并設(shè)定它的接創(chuàng)建一個(gè)具體命令對(duì)象并設(shè)定它的接 收者。收者。InvokerInvoker要求該命令執(zhí)行這個(gè)請(qǐng)求。接收者對(duì)象要求該命令執(zhí)行這個(gè)請(qǐng)求。接收者對(duì)象ReceiverReceiver知道如何實(shí)施并執(zhí)行一個(gè)與請(qǐng)求相關(guān)的操作知道

21、如何實(shí)施并執(zhí)行一個(gè)與請(qǐng)求相關(guān)的操作 實(shí)現(xiàn)命令模式時(shí)應(yīng)注意的問(wèn)題:實(shí)現(xiàn)命令模式時(shí)應(yīng)注意的問(wèn)題:l 考慮一個(gè)命令對(duì)象應(yīng)達(dá)到何種智能程度,以動(dòng)態(tài)考慮一個(gè)命令對(duì)象應(yīng)達(dá)到何種智能程度,以動(dòng)態(tài) 地找到它們的接收者。地找到它們的接收者。l 是否支持取消(是否支持取消(undoundo)和重做()和重做(redoredo)。)。l 在抽象類在抽象類CommandCommand中存入更多的信息避免取消操中存入更多的信息避免取消操 作過(guò)程中的錯(cuò)誤積累。作過(guò)程中的錯(cuò)誤積累。l 如何使用如何使用C+C+模板來(lái)完成設(shè)計(jì)。模板來(lái)完成設(shè)計(jì)。 2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)20UML系統(tǒng)建模與分析設(shè)計(jì)8.3.48.

22、3.4解釋器模式(解釋器模式(InterpreterInterpreter) 解釋器模式是類行為型模式。解釋器模式是類行為型模式。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)21UML系統(tǒng)建模與分析設(shè)計(jì)參與解釋器模式的對(duì)象有:參與解釋器模式的對(duì)象有:l 抽象類抽象類AbstractExpressionAbstractExpression聲明一個(gè)抽象的解聲明一個(gè)抽象的解 釋操作,為語(yǔ)法樹中所有的節(jié)點(diǎn)共享。釋操作,為語(yǔ)法樹中所有的節(jié)點(diǎn)共享。l 終結(jié)符表達(dá)式節(jié)點(diǎn)類終結(jié)符表達(dá)式節(jié)點(diǎn)類TerminalExpressionTerminalExpression實(shí)現(xiàn)實(shí)現(xiàn) 與文法中的終結(jié)符相關(guān)聯(lián)的解釋操作。與文法中

23、的終結(jié)符相關(guān)聯(lián)的解釋操作。l 非終結(jié)符表達(dá)式節(jié)點(diǎn)類非終結(jié)符表達(dá)式節(jié)點(diǎn)類NonterminalExpressionNonterminalExpression 進(jìn)行一般的解釋操作。進(jìn)行一般的解釋操作。l 語(yǔ)境類語(yǔ)境類ContextContext包含解釋器之外的一些全局信包含解釋器之外的一些全局信 息。息。l 客戶類客戶類ClientClient構(gòu)建表示該文法定義的語(yǔ)言中一構(gòu)建表示該文法定義的語(yǔ)言中一 個(gè)特定句子的抽象語(yǔ)法樹。個(gè)特定句子的抽象語(yǔ)法樹。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)22UML系統(tǒng)建模與分析設(shè)計(jì)8.3.58.3.5迭代器模式(迭代器模式(IteratorIterator) 迭代

24、器模式提供一種順序訪問(wèn)某個(gè)對(duì)象集合迭代器模式提供一種順序訪問(wèn)某個(gè)對(duì)象集合中的各個(gè)元素的功能,而又不需暴露該對(duì)象的內(nèi)中的各個(gè)元素的功能,而又不需暴露該對(duì)象的內(nèi)部表示。迭代器和對(duì)象集合具有極強(qiáng)的耦合性。部表示。迭代器和對(duì)象集合具有極強(qiáng)的耦合性。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)23UML系統(tǒng)建模與分析設(shè)計(jì)迭代器模式可在下列情況時(shí)使用:迭代器模式可在下列情況時(shí)使用:1 1)訪問(wèn)一個(gè)對(duì)象集合的內(nèi)容而又不暴露它的內(nèi)部表示。)訪問(wèn)一個(gè)對(duì)象集合的內(nèi)容而又不暴露它的內(nèi)部表示。2 2)支持對(duì)對(duì)象集合的多種遍歷。)支持對(duì)對(duì)象集合的多種遍歷。3 3)為遍歷不同的集合結(jié)構(gòu)提供一個(gè)統(tǒng)一的接口,即支持多態(tài))為遍歷不

25、同的集合結(jié)構(gòu)提供一個(gè)統(tǒng)一的接口,即支持多態(tài) 迭代。迭代。參與的對(duì)象有:參與的對(duì)象有:l 抽象迭代器類抽象迭代器類IteratorIterator定義訪問(wèn)和遍歷元素的接口。定義訪問(wèn)和遍歷元素的接口。l 具體迭代器類具體迭代器類ConcreteIteratorConcreteIterator實(shí)現(xiàn)迭代器接口,并對(duì)該實(shí)現(xiàn)迭代器接口,并對(duì)該 集合遍歷時(shí)跟蹤當(dāng)前位置。集合遍歷時(shí)跟蹤當(dāng)前位置。l 抽象集合類抽象集合類AggregateAggregate定義創(chuàng)建相應(yīng)迭代器對(duì)象的接口。定義創(chuàng)建相應(yīng)迭代器對(duì)象的接口。l 具體集合類具體集合類ConcreteAggreagateConcreteAggreagate實(shí)

26、現(xiàn)創(chuàng)建相應(yīng)迭代器的實(shí)現(xiàn)創(chuàng)建相應(yīng)迭代器的 接口,該操作返回具體迭代器類接口,該操作返回具體迭代器類ConcreteIteratorConcreteIterator的一的一 個(gè)適當(dāng)?shù)膶?shí)例。個(gè)適當(dāng)?shù)膶?shí)例。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)24UML系統(tǒng)建模與分析設(shè)計(jì)迭代器模式有三個(gè)重要的作用:迭代器模式有三個(gè)重要的作用:l 支持以不同的方式遍歷一個(gè)集合,復(fù)雜的集合支持以不同的方式遍歷一個(gè)集合,復(fù)雜的集合 可用多種方式進(jìn)行遍歷。可用多種方式進(jìn)行遍歷。l 迭代器簡(jiǎn)化了集合的接口。迭代器簡(jiǎn)化了集合的接口。l 在同一個(gè)集合上可以有多個(gè)遍歷。在同一個(gè)集合上可以有多個(gè)遍歷。2021-7-8UML系統(tǒng)建模與

27、分析設(shè)計(jì)25UML系統(tǒng)建模與分析設(shè)計(jì)8.3.68.3.6觀察者模式(觀察者模式(ObserverObserver) 當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新。它的對(duì)象都得到通知并被自動(dòng)更新。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)26UML系統(tǒng)建模與分析設(shè)計(jì)使用觀察者模式的情況:使用觀察者模式的情況:l 當(dāng)一個(gè)抽象模式分為兩個(gè)封裝在分別獨(dú)立的對(duì)象中,各當(dāng)一個(gè)抽象模式分為兩個(gè)封裝在分別獨(dú)立的對(duì)象中,各 自獨(dú)立地改變和復(fù)用。自獨(dú)立地改變和復(fù)用。l 當(dāng)對(duì)一個(gè)對(duì)象的改變需要同時(shí)改變其它對(duì)象,而不知道當(dāng)對(duì)一個(gè)對(duì)象的改變需要同時(shí)改變其它對(duì)象

28、,而不知道 具體有多少對(duì)象有待改變。具體有多少對(duì)象有待改變。l 當(dāng)一個(gè)對(duì)象必須通知其它對(duì)象,而它又不能假定其它對(duì)當(dāng)一個(gè)對(duì)象必須通知其它對(duì)象,而它又不能假定其它對(duì) 象是誰(shuí)。象是誰(shuí)。參與觀察者模式的對(duì)象有:參與觀察者模式的對(duì)象有:l 目標(biāo)對(duì)象目標(biāo)對(duì)象SubjectSubject提供注冊(cè)和刪除提供注冊(cè)和刪除ObserveObserve對(duì)象的接口并對(duì)象的接口并 可以有任意多個(gè)可以有任意多個(gè)ObserveObserve。l 抽象觀察者類抽象觀察者類ObserveObserve為在為在SubjectSubject改變時(shí)需獲得通知的改變時(shí)需獲得通知的 對(duì)象定義一個(gè)更新的接口。對(duì)象定義一個(gè)更新的接口。l 具體

29、目標(biāo)對(duì)象具體目標(biāo)對(duì)象ConcreteSubjectConcreteSubject自身狀態(tài)發(fā)生變化時(shí),向自身狀態(tài)發(fā)生變化時(shí),向 它的各個(gè)觀察者對(duì)象它的各個(gè)觀察者對(duì)象ObserveObserve發(fā)出通知。發(fā)出通知。l 具體觀察者對(duì)象具體觀察者對(duì)象ConcreteObserverConcreteObserver維護(hù)一引用,以使存維護(hù)一引用,以使存 儲(chǔ)狀態(tài)、自身狀態(tài)與目標(biāo)對(duì)象儲(chǔ)狀態(tài)、自身狀態(tài)與目標(biāo)對(duì)象SubjectSubject狀態(tài)保持一致。狀態(tài)保持一致。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)27UML系統(tǒng)建模與分析設(shè)計(jì)8.3.78.3.7代理模式(代理模式(ProxyProxy) 使用代理模式常見

30、情況有:l 遠(yuǎn)程代理(Remote Proxy)。為一個(gè)對(duì)象在不同 的地址空間提供局部代表。l 虛擬代理(Virtual Proxy)。根據(jù)需要?jiǎng)?chuàng)建開 銷很大的對(duì)象。l 保護(hù)代理(Protection Proxy)。控制對(duì)原始對(duì) 象的訪問(wèn)。l 智能引用(Smart Reference)取代了簡(jiǎn)單的指 針,在訪問(wèn)對(duì)象時(shí)執(zhí)行一些附加操作。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)28UML系統(tǒng)建模與分析設(shè)計(jì)代理模式的參與者有:代理模式的參與者有:l 客戶對(duì)象客戶對(duì)象ClientClient向一個(gè)作為接口的向一個(gè)作為接口的SubjectSubject發(fā)出請(qǐng)求。發(fā)出請(qǐng)求。l 代理對(duì)象代理對(duì)象ProxyP

31、roxy保存一個(gè)引用使其可以訪問(wèn)實(shí)體。保存一個(gè)引用使其可以訪問(wèn)實(shí)體。l 抽象類抽象類SubjectSubject定義實(shí)體目標(biāo)對(duì)象定義實(shí)體目標(biāo)對(duì)象RealsubjectRealsubject和代理和代理 對(duì)象對(duì)象ProxyProxy的共用接口。的共用接口。l 實(shí)體目標(biāo)對(duì)象實(shí)體目標(biāo)對(duì)象RealSubjectRealSubject定義代理對(duì)象定義代理對(duì)象ProxyProxy所代表所代表 的實(shí)體。的實(shí)體。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)29UML系統(tǒng)建模與分析設(shè)計(jì)8.3.88.3.8單例模式(單例模式(SingletonSingleton) 單例模式保證一個(gè)類僅有一個(gè)實(shí)例,并提供一單例模式保證

32、一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。通常單例模式適合在下列情況中使用:通常單例模式適合在下列情況中使用:l 當(dāng)類只能有一個(gè)實(shí)例而且客戶可以從眾所周知的訪問(wèn)點(diǎn)訪當(dāng)類只能有一個(gè)實(shí)例而且客戶可以從眾所周知的訪問(wèn)點(diǎn)訪 問(wèn)它時(shí)。問(wèn)它時(shí)。l 該唯一實(shí)例通過(guò)子類化可擴(kuò)展,客戶無(wú)需更改代碼就能使該唯一實(shí)例通過(guò)子類化可擴(kuò)展,客戶無(wú)需更改代碼就能使 用一個(gè)擴(kuò)展的實(shí)例時(shí)。用一個(gè)擴(kuò)展的實(shí)例時(shí)。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)30UML系統(tǒng)建模與分析設(shè)計(jì)單例模式的參與者有:?jiǎn)卫J降膮⑴c者有:l 單例對(duì)象單例對(duì)象SingletonSingleton定義一個(gè)定義一個(gè)Instan

33、ce( )Instance( )操作,允許客戶操作,允許客戶 訪問(wèn)它的唯一實(shí)例,并創(chuàng)建它自己的唯一實(shí)例。訪問(wèn)它的唯一實(shí)例,并創(chuàng)建它自己的唯一實(shí)例。l Instance( ) Instance( )是一個(gè)類操作(即是一個(gè)類操作(即SmalltalkSmalltalk中的一個(gè)類方法中的一個(gè)類方法 和和C+C+中的一個(gè)靜態(tài)成員函數(shù))。中的一個(gè)靜態(tài)成員函數(shù))。單例模式的優(yōu)點(diǎn):?jiǎn)卫J降膬?yōu)點(diǎn):l 因?yàn)閱卫愐驗(yàn)閱卫怱ingletonSingleton封裝了它的唯一實(shí)例,可以實(shí)現(xiàn)對(duì)封裝了它的唯一實(shí)例,可以實(shí)現(xiàn)對(duì) 唯一實(shí)例的受控訪問(wèn)。唯一實(shí)例的受控訪問(wèn)。l 單例類單例類SingletonSingleton

34、可以有子類,很容易用這個(gè)擴(kuò)展類的實(shí)可以有子類,很容易用這個(gè)擴(kuò)展類的實(shí) 例來(lái)配置一個(gè)應(yīng)用。例來(lái)配置一個(gè)應(yīng)用。l 單例模式允許可變數(shù)目的實(shí)例,可以靈活改變?cè)O(shè)計(jì)想法。單例模式允許可變數(shù)目的實(shí)例,可以靈活改變?cè)O(shè)計(jì)想法。l 通過(guò)實(shí)踐表明,單例模式相比類操作要更靈活。通過(guò)實(shí)踐表明,單例模式相比類操作要更靈活。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)31UML系統(tǒng)建模與分析設(shè)計(jì)8.3.98.3.9狀態(tài)模式(狀態(tài)模式(StateState) 狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)變化時(shí)改狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)變化時(shí)改變它的行為。變它的行為。下面兩種情況之一可以使用狀態(tài)模式:下面兩種情況之一可以使用狀態(tài)模式

35、:1 1)一個(gè)對(duì)象的行為取決于它的狀態(tài),并且它必須在運(yùn)行)一個(gè)對(duì)象的行為取決于它的狀態(tài),并且它必須在運(yùn)行 時(shí)刻根據(jù)狀態(tài)改變它的行為。時(shí)刻根據(jù)狀態(tài)改變它的行為。2 2)一個(gè)操作中含有龐大的多分支的條件語(yǔ)句,且這些分)一個(gè)操作中含有龐大的多分支的條件語(yǔ)句,且這些分 支依賴于該對(duì)象的狀態(tài)。支依賴于該對(duì)象的狀態(tài)。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)32UML系統(tǒng)建模與分析設(shè)計(jì)參與狀態(tài)模式的對(duì)象有:l 語(yǔ)境對(duì)象Context定義客戶接口,并維護(hù)一個(gè) 定義ConcreteState子類的實(shí)例。l 抽象類State定義一個(gè)接口以封裝與語(yǔ)境對(duì)象 Context的一個(gè)特定狀態(tài)相關(guān)的行為。l 具體狀態(tài)Conc

36、reteState子類實(shí)現(xiàn)一個(gè)與語(yǔ)境 對(duì)象Context的一個(gè)狀態(tài)相關(guān)的行為。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)33UML系統(tǒng)建模與分析設(shè)計(jì)8.3.108.3.10策略模式(策略模式(StrategyStrategy) 將一組算法中的每個(gè)算法封裝到具有共同接口將一組算法中的每個(gè)算法封裝到具有共同接口的獨(dú)立類中,使得它們可以相互替換。的獨(dú)立類中,使得它們可以相互替換。1 1使用策略模式的時(shí)機(jī)使用策略模式的時(shí)機(jī)l 多個(gè)類之間的區(qū)別僅在于它們的行為,使用策略模多個(gè)類之間的區(qū)別僅在于它們的行為,使用策略模 式可以動(dòng)態(tài)地選擇一種行為。式可以動(dòng)態(tài)地選擇一種行為。l 一個(gè)系統(tǒng)需要?jiǎng)討B(tài)地在幾種算法中選擇

37、一種。一個(gè)系統(tǒng)需要?jiǎng)討B(tài)地在幾種算法中選擇一種。l 一個(gè)系統(tǒng)的算法使用的數(shù)據(jù)不可以讓客戶端知道。一個(gè)系統(tǒng)的算法使用的數(shù)據(jù)不可以讓客戶端知道。l 避免使用難以維護(hù)的多重條件選擇語(yǔ)句,體現(xiàn)面向避免使用難以維護(hù)的多重條件選擇語(yǔ)句,體現(xiàn)面向 對(duì)象設(shè)計(jì)的概念。對(duì)象設(shè)計(jì)的概念。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)34UML系統(tǒng)建模與分析設(shè)計(jì)2策略模式的結(jié)構(gòu)策略模式涉及到三個(gè)角色:策略模式涉及到三個(gè)角色:l 語(yǔ)境(語(yǔ)境(ContextContext)角色:持有策略類)角色:持有策略類StrategyStrategy的引用。的引用。l 抽象策略(抽象策略(StrategyStrategy)角色:這是一個(gè)接口

38、或抽象類。)角色:這是一個(gè)接口或抽象類。 l 具體策略(具體策略(ConcreteStrategyConcreteStrategy)角色:以)角色:以StrategyStrategy接口接口 實(shí)現(xiàn)某個(gè)具體算法。實(shí)現(xiàn)某個(gè)具體算法。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)35UMLUML系統(tǒng)建模與分析設(shè)計(jì)系統(tǒng)建模與分析設(shè)計(jì)3 3策略模式的優(yōu)點(diǎn)和缺點(diǎn)策略模式的優(yōu)點(diǎn)和缺點(diǎn)策略模式的優(yōu)點(diǎn)有:策略模式的優(yōu)點(diǎn)有:l 策略模式提供了管理相關(guān)的算法族的辦法。避免重復(fù)策略模式提供了管理相關(guān)的算法族的辦法。避免重復(fù) 的代碼。的代碼。l 策略模式提供了可以替換繼承關(guān)系的辦法。使其不可策略模式提供了可以替換繼承關(guān)系的辦

39、法。使其不可 能動(dòng)態(tài)改變算法或行為。能動(dòng)態(tài)改變算法或行為。l 使用策略模式可以避免使用多重條件轉(zhuǎn)移語(yǔ)句。使用策略模式可以避免使用多重條件轉(zhuǎn)移語(yǔ)句。策略模式的缺點(diǎn)有:策略模式的缺點(diǎn)有:l 客戶端必須知道所有的策略類,并自行決定使用哪一客戶端必須知道所有的策略類,并自行決定使用哪一 個(gè)策略類。個(gè)策略類。l 策略模式造成很多的策略類。策略模式造成很多的策略類。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)36UML系統(tǒng)建模與分析設(shè)計(jì)8.3.118.3.11訪問(wèn)者模式(訪問(wèn)者模式(VisitorVisitor) 訪問(wèn)者模式可以在不改變各元素的類的前提下定義作用于這些元素的新操作。 2021-7-8UML系統(tǒng)

40、建模與分析設(shè)計(jì)37UML系統(tǒng)建模與分析設(shè)計(jì)訪問(wèn)者模式通常適用于下列情況:1)一個(gè)對(duì)象包含很多有不同接口的類對(duì)象,這些 對(duì)象實(shí)施一些依賴于其具體類的操作。2)對(duì)一個(gè)對(duì)象中的對(duì)象進(jìn)行很多不相關(guān)的操作, 而又不想直接接觸這些對(duì)象的類。3)定義對(duì)象結(jié)構(gòu)的類很少改變,但經(jīng)常需要在此 結(jié)構(gòu)上定義新的操作。2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)38UML系統(tǒng)建模與分析設(shè)計(jì)8.4.18.4.1設(shè)計(jì)模式遵循的原則設(shè)計(jì)模式遵循的原則(1 1)開)開- -閉原則(閉原則(Open-Closed PrincipleOpen-Closed Principle,OCPOCP)。對(duì)擴(kuò))。對(duì)擴(kuò) 展開放,對(duì)修改關(guān)閉。展開放,

41、對(duì)修改關(guān)閉。(2 2)里氏代換原則()里氏代換原則(Liskov Substitution PrincipleLiskov Substitution Principle, LSP LSP)。軟件實(shí)體如果使用的是一個(gè)基類,那么一定)。軟件實(shí)體如果使用的是一個(gè)基類,那么一定 適用于其子類,而且它根本不能察覺出基類對(duì)象和適用于其子類,而且它根本不能察覺出基類對(duì)象和 子類對(duì)象的區(qū)別。子類對(duì)象的區(qū)別。(3 3)依賴倒轉(zhuǎn)原則()依賴倒轉(zhuǎn)原則(Dependence Inversion PrincipleDependence Inversion Principle, DIP DIP)。要依賴于抽象,不要依賴于

42、具體。即針對(duì)接)。要依賴于抽象,不要依賴于具體。即針對(duì)接 口編程,不要針對(duì)實(shí)現(xiàn)編程。口編程,不要針對(duì)實(shí)現(xiàn)編程。(4 4)接口隔離原則()接口隔離原則(Interface Segregation Interface Segregation Principle Principle,ISPISP)。一個(gè)類對(duì)另外一個(gè)類的依賴是建)。一個(gè)類對(duì)另外一個(gè)類的依賴是建 立在最小的接口上。立在最小的接口上。8.4 8.4 設(shè)計(jì)模式遵循的原則和使用策略設(shè)計(jì)模式遵循的原則和使用策略 2021-7-8UML系統(tǒng)建模與分析設(shè)計(jì)39UML系統(tǒng)建模與分析設(shè)計(jì)(5 5)合成)合成/ /聚合復(fù)用原則(聚合復(fù)用原則(Composite/Aggregate Composite/Aggregate Reuse Principle Reuse Principle,CARPCARP)。要盡量使用合成)。要盡量使用合成 / /聚合,盡量不要使用繼承。聚合,盡量不要使用繼承。(6 6)迪米特法則()迪米特法則(Law of DemeterLaw of Demeter,LoDLoD)。一個(gè))。一個(gè) 對(duì)象應(yīng)該對(duì)其它對(duì)象有盡可能少的了解。通對(duì)象應(yīng)該對(duì)其它對(duì)象有盡可能少的了解。通 過(guò)第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。過(guò)第

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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)論