資源描述:
《UML設(shè)計(jì)模式 8 設(shè)計(jì)模式(2)--Strategy, Bridge模式.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、8設(shè)計(jì)模式(2)Strategy、Bridge模式權(quán)巍主要內(nèi)容8.1Strategy模式8.2Bridge模式8.3“開-閉”原則8.4組合/聚合復(fù)用原則2UML和設(shè)計(jì)模式8.1Strategy(策略)模式UML和設(shè)計(jì)模式3網(wǎng)上商城購物車系統(tǒng)的例子計(jì)算購物車中所有商品的總金額、運(yùn)費(fèi)。而商城經(jīng)常促銷,不同的商品有不同的折扣。怎樣計(jì)算?用if、switch等條件語句,根據(jù)不同情況用不同算法計(jì)算;繼承,在子類里面實(shí)現(xiàn)不同的行為;8.1.1什么是Strategy模式Strategy模式又稱Policy模式,它定義一系列算法,把它們一個(gè)個(gè)封裝起來,并且使它們可相互替換。該模式使
2、算法可以獨(dú)立于使用它的客戶而變化。UML和設(shè)計(jì)模式48.1.2策略模式中的角色環(huán)境(Context)持有一個(gè)Strategy類的引用??啥x一個(gè)接口讓Strategy訪問它的數(shù)據(jù)。抽象策略(Strategy)給出所有的具體策略類所需的接口,通常由一個(gè)接口或抽象類實(shí)現(xiàn)。具體策略(ContreteStrategy)包裝了相關(guān)的算法或行為,實(shí)現(xiàn)Strategy接口的某個(gè)具體類。UML和設(shè)計(jì)模式5UML和設(shè)計(jì)模式6Context示意代碼:publicclassContext{privateStrategystrategy;publicvoidcontextInterface()
3、{strategy.strategyInterface();}}UML和設(shè)計(jì)模式7Strategy示意代碼:abstractpublicclassStrategy{publicabstractvoidstrategyInterface();}ContreteStrategy示意代碼:publicclassConcreteStrategyextendsStrategy{publicvoidstrategyInterface(){//算法實(shí)現(xiàn)代碼}}8.1.3策略模式的代碼示例某網(wǎng)上商城舉行促銷活動(dòng):圖書每本折扣1元,服裝類8折,家居類9折,護(hù)膚品沒折扣。顧客結(jié)算時(shí),計(jì)算購
4、物車中所有商品的總金額。UML和設(shè)計(jì)模式8例子的策略模式示意代碼DiscountStrategy代碼:NoDiscountStrategy代碼:FlatRateStrategy代碼:PercentageStrategy代碼:Context代碼:Client代碼:UML和設(shè)計(jì)模式9練習(xí)要設(shè)計(jì)一個(gè)系統(tǒng),對(duì)輸入的數(shù)據(jù)實(shí)現(xiàn)排序,系統(tǒng)提供幾種排序方法。系統(tǒng)運(yùn)行時(shí)根據(jù)用戶選擇的排序方法對(duì)數(shù)據(jù)進(jìn)行排序。(另外,可能會(huì)常常增加新的排序算法、或刪除某個(gè)算法)UML和設(shè)計(jì)模式108.2Bridge(橋接)模式UML和設(shè)計(jì)模式11開發(fā)游戲軟件的例子需要開發(fā)一款太空大戰(zhàn)游戲,該游戲可安裝在PC
5、或手機(jī)上,不同平臺(tái)上游戲的功能完全相同,并且有多種型號(hào)的太空船可供用戶選擇。存在的問題在PC和手機(jī)上的圖形繪制、聲效、游戲操作等方面的實(shí)現(xiàn)不同。經(jīng)常需要增加新型的太空船。實(shí)現(xiàn)方案一:UML和設(shè)計(jì)模式12UML和設(shè)計(jì)模式13示意代碼//抽象飛船基類publicabstractclassSpaceShip{publicabstractshot();publicabstractrun();//...}//各種型號(hào)飛船publicabstractclassSpaceShipT20extendsSpaceShip{...}publicabstractclassSpaceShipT
6、30extendsSpaceShip{...}publicabstractclassSpaceShipT50extendsSpaceShip{...}//不同平臺(tái)飛船publicclassPCSpaceShipextendsSpaceShip{...}publicclassMobileSpaceShipextendsSpaceShip{...}8.2.1什么是Bridge模式Bridge模式將抽象和實(shí)現(xiàn)分離,使它們都可以獨(dú)立的變化。Bridge模式是一種結(jié)構(gòu)型模式,使用對(duì)象間的組合關(guān)系解耦了抽象和實(shí)現(xiàn)之間固有的綁定關(guān)系,使得抽象和實(shí)現(xiàn)可以沿著各自的維度來變化。一般應(yīng)用在
7、“兩個(gè)非常強(qiáng)的變化維度”,有時(shí)候即使有兩個(gè)變化的維度,但是某個(gè)方向的變化維度并不劇烈,即當(dāng)兩個(gè)變化不會(huì)導(dǎo)致縱橫交錯(cuò)的結(jié)果,并不一定要使用本模式。UML和設(shè)計(jì)模式14UML和設(shè)計(jì)模式15Bridge模式的類圖Bridge模式中的角色抽象化(Abstraction):抽象化給出的定義,并保存一個(gè)對(duì)實(shí)現(xiàn)化對(duì)象的引用。修正抽象化(RefinedAbstraction):擴(kuò)展抽象化角色,改變和修正父類對(duì)抽象化的定義。實(shí)現(xiàn)化(Implementor):給出實(shí)現(xiàn)化角色的接口。實(shí)現(xiàn)化角色只給出底層操作,而抽象化角色應(yīng)只給出基于底層操作的更高一層的操作。具