設(shè)計(jì)模式實(shí)驗(yàn)報(bào)告范文_第1頁
設(shè)計(jì)模式實(shí)驗(yàn)報(bào)告范文_第2頁
設(shè)計(jì)模式實(shí)驗(yàn)報(bào)告范文_第3頁
設(shè)計(jì)模式實(shí)驗(yàn)報(bào)告范文_第4頁
設(shè)計(jì)模式實(shí)驗(yàn)報(bào)告范文_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、設(shè)計(jì)模式實(shí)驗(yàn)指導(dǎo)書 10 學(xué)時(shí) 教 師: 張 凱 實(shí)驗(yàn)一工廠模式的應(yīng)用 【實(shí)驗(yàn)?zāi)康摹?1)掌握工廠模式(Factory)的特點(diǎn) 2)分析具體問題,使用工廠模式進(jìn)行設(shè)計(jì)。 【實(shí)驗(yàn)內(nèi)容和要求】 有一個(gè)OEM制造商代理做HP筆記本電腦(Laptop),后來該制造商得到了更 多的品牌筆記本電腦的訂單 Acer,Lenovo, Dell,該OEM商發(fā)現(xiàn),如果一次同 時(shí)做很多個(gè)牌子的本本,有些不利于管理。利用工廠模式改善設(shè)計(jì),用 C#控制 臺(tái)應(yīng)用程序?qū)崿F(xiàn)該OEM制造商的工廠模式。繪制該模式的 UML圖。 【模式UML圖】 +: Copu.l.*tr D11 1r + cputwrlg: 0: void t

2、 cetHambwrc 0 ; voad 1 -JT- 1 + tH-uiliTnr 0:d EDJFaetory 4 cr0 : M-anliijf g: +零曹電() . . 【模式代碼】 public class AbstractFactoryTest public static void main( Stri ng args) Hamburg h; Cola c; AbstractFactory af= new MDNFactory(); h=af.createHamburg(); c=af.createCola(); h.getHumburg(); c.getCola(); af=

3、new KDJFactory(); h=af.createHamburg(); c=af.createCola(); h.getHumburg(); c.getCola(); in terfaceAbstractFactory Hamburg createHamburg(); Cola createCola(); class MDNFactory impleme nts AbstractFactory Override public Hamburg createHamburg() return new MDNHamburg(); Override public Cola createCola(

4、) return new MDNCola(); class KDJFactory impleme nts AbstractFactory Override public Hamburg createHamburg() return new KDJHamburg(); Override public Cola createCola() return new KDJCola(); /* * kDJ class MDNHamburg implements Hamburg Override public void getHumburg() System. out .println( MDNHambur

5、g); class KDJHamburg impleme nts Hamburg Override public void getHumburg() / TODOAuto-ge nerated method stub System. out .println( KDJHamburg); in terfaceCola void getCola(); class MDNCola impleme nts Cola Override public void getCola() System. out .println( MDNCola); class KDJCola impleme ntsCola O

6、verride public void getCola() System. out .println( KDJCola); 【運(yùn)行截圖】 MDNHamburg MDNCola KDDHamburg KDJCola 【實(shí)驗(yàn)小結(jié)】 抽象工廠模式主要適用于以下情況: 一系列要獨(dú)立于它的產(chǎn)品的創(chuàng)建、組合和表示時(shí)。、 一個(gè)系統(tǒng)要由多個(gè)產(chǎn)品系列中的一個(gè)來配置時(shí)。 當(dāng)要強(qiáng)調(diào)一系列相關(guān)的產(chǎn)品對(duì)象的設(shè)計(jì)以便進(jìn)行聯(lián)合使用時(shí)。 當(dāng)要提供一個(gè)產(chǎn)品類庫,而只要顯示它們的接口而不是實(shí)現(xiàn)時(shí) 實(shí)驗(yàn)三適配器模式的應(yīng)用 【實(shí)驗(yàn)?zāi)康摹?1) 掌握適配器模式(Adapter)的特點(diǎn) 2) 分析具體問題,使用適配器模式進(jìn)行設(shè)計(jì)。 【實(shí)

7、驗(yàn)內(nèi)容和要求】 一個(gè)軟件團(tuán)隊(duì)開發(fā)繪圖系統(tǒng),設(shè)計(jì)了圓對(duì)象 (Circle)、矩形對(duì)象(Rectangle), 線對(duì)象(Line)都支持Draw()函數(shù),即可以通過Draw()函數(shù)繪制圖形。為了加快項(xiàng) 目進(jìn)度,將角度對(duì)象(Angle)繪制功能交給了合作團(tuán)隊(duì)實(shí)現(xiàn)。但合作團(tuán)隊(duì)將角度 對(duì)象繪制函數(shù)定為了 DrawA ngle()。繪圖系統(tǒng)提供給用戶后,用戶不滿意,希望 能統(tǒng)一的調(diào)用,不用記太多命令。應(yīng)用適配器模式,用C#控制臺(tái)應(yīng)用程序完善 該設(shè)計(jì)。繪制該模式的UML圖。 【模式UM圖】 + draw 0 : Rectangle AngleAdapter i n Angle 一 angle : Angle

8、 + draw () : void dravAngle () : void BFaint Client * draw 0 : veld 【模式代碼】 public class AdapterTest public static void main( Stri ng args) Paint a= new An gleAdapter(); a. draw(); in terfacePai nt void draw(); class Circleimpleme ntsPai nt Override public void draw() System. out .println(圓圓); class

9、Recta ngleimpleme nts Pai nt Override public void draw() System. out .println(方方”); class Li ne impleme nts Pai nt Override public void draw() System. out .println(線線); class An gle public void DrawAngle() System. out .println(角度); class An gleAdapterimpleme ntsPai nt privateAn glea=new An gle(); Ov

10、erride public void draw() / TODOAuto-ge nerated method stub a. DrawA ngle(); 【運(yùn)行截圖】 角度 【實(shí)驗(yàn)小結(jié)】 適配器模式主要適用于以下情況: 當(dāng)想要使用一個(gè)已經(jīng)存在的類,但是該類的接口不符合現(xiàn)有的需求時(shí)。 當(dāng)需要?jiǎng)?chuàng)建一個(gè)可以被復(fù)用的類, 該類能夠與其他無關(guān)的類甚至無法預(yù)見的 類協(xié)同工作時(shí)。 當(dāng)需要使用一個(gè)已經(jīng)存在的子類,但是不可能對(duì)所有的都進(jìn)行子類化以匹配 他們的接口時(shí),對(duì)象適配器可以對(duì)其父類接口進(jìn)行適配。 實(shí)驗(yàn)四橋接模式的應(yīng)用 【實(shí)驗(yàn)?zāi)康摹?1) 掌握橋接模式(Bridge)的特點(diǎn) 2) 分析具體問題,使用橋接模式

11、進(jìn)行設(shè)計(jì) 【實(shí)驗(yàn)內(nèi)容和要求】 一個(gè) 咖啡店 可以提 供大杯(JorumCoffee)、中 杯(MediumCoffee)、小杯 (SmallCoffee)的咖啡(Coffee),為了滿足不同用戶的口味,在咖啡中可以添加牛奶 (Milk),或者糖(Sugar),或者檸檬(Lemon),提供給用戶不同口味的組合,如大 杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加檸檬,小杯咖啡加糖等。應(yīng)用橋接模 式,用C#控制臺(tái)應(yīng)用程序?qū)崿F(xiàn)該設(shè)計(jì)。繪制該模式的UML圖。 【模式類圖】 JorTuiCDfe -Coff public class BridgeTest public static void main( Str

12、i ng args) Bridge b; | b=new Sugar(); b. setCoffee( new JorumCoffee(); b. getCoffee(); b= new Milk(); b.setCoffee( new SmallCoffee(); b. getCoffee(); in terfaceCoffee void getCoffee(); class JorumCoffee impleme nts Coffee Override public void getCoffee() / TODOAuto-ge nerated method stub System. out

13、 .print( 大杯咖啡); class MediumCoffeeimpleme ntsCoffee Override public void getCoffee() / TODOAuto-ge nerated method stub System. out .print( 中杯咖啡); class SmallCoffee impleme nts Coffee Override public void getCoffee() / TODOAuto-ge nerated method stub System. out .print( 小杯咖啡); *配料 */ abstract class B

14、ridge protected Coffee c; void setCoffee(Coffee co) c=co; public void getCoffee() c. getCoffee(); class Sugarexte nds Bridge Override public void getCoffee() c. getCoffee(); System. out .println(加糖); class Milkexte nds Bridge Override publicvoid getCoffee() c.getCoffee(); System. out .println(加牛奶);

15、class Lem on exte nds Bridge Override public void getCoffee() c.getCoffee(); System, out .println(加檸檬”); 【運(yùn)行截圖】 大杯咖啡加糖 小杯咖啡加牛奶| 【實(shí)驗(yàn)小結(jié)】 橋接模式的適用情況有: 當(dāng)不希望在抽象和它的實(shí)現(xiàn)之間有一個(gè)固定的綁定關(guān)系時(shí)。 當(dāng)類的抽象以及它的實(shí)現(xiàn)都應(yīng)該可以通過生成子類的方法加以擴(kuò)充時(shí) 當(dāng)對(duì)一個(gè)抽象類的實(shí)現(xiàn)部分的修改應(yīng)對(duì)客戶不產(chǎn)生影響時(shí)。 實(shí)驗(yàn)五裝飾模式的應(yīng)用 【實(shí)驗(yàn)?zāi)康摹?1)掌握裝飾模式(Decorator)的特點(diǎn) 2)分析具體問題,使用裝飾模式進(jìn)行設(shè)計(jì)。 【實(shí)驗(yàn)內(nèi)容和

16、要求】 喜羊羊逃命”游戲:喜羊羊被灰太狼追,喜羊羊最多5條命,灰太狼每咬到 喜羊羊一次,喜羊羊就要少一條命。在逃的過程中喜羊羊可以吃到三種蘋果, 吃 紅蘋果”可以給喜羊羊加上保護(hù)罩,吃綠蘋果”可以加快喜羊羊奔跑速度,吃黃 蘋果”可以使喜羊羊趟著水跑。應(yīng)用裝飾模式,用C#控制臺(tái)應(yīng)用程序?qū)崿F(xiàn)該設(shè)計(jì)。 繪制該模式的UML圖。 提示:這個(gè)例子如果用類的繼承來實(shí)現(xiàn)的話那可就麻煩了, 你需要為喜羊羊 派生3*2*1=6個(gè)子類(有保護(hù)罩的喜羊羊,奔跑速度加快的喜羊羊,會(huì)趟水的喜 羊羊,既有保護(hù)罩又會(huì)趟水的喜羊羊,奔跑速度快且會(huì)趟水的喜羊羊,有保護(hù)罩 且奔跑速度快的喜羊羊,有保護(hù)罩、奔跑速度快且會(huì)趟水的喜羊羊

17、) ,如果使用 裝飾模式的那就不用派生諸多子類了,當(dāng)喜羊羊每吃到一個(gè)蘋果,我們就用裝飾 模式給喜羊羊加一個(gè)動(dòng)態(tài)增加一個(gè)新功能即可。 【模式類圖】 + Opcr 口 11 專n O; VQi d + OperationO O s void Sw liilngK iYangyaria 0Xian.fi + Operation O : void 【模式代碼】 public class DecoratorTestOI public static void main( Stri ng args) Con creteXiYY cxyy=new Con creteXiYY(); ProtectXiYangy

18、ang px= . new ProtectXiYangyang(); FastXiYa ngya ng fx=new FastXiYa ngya ng(); Swimi ngXiYa ngya ng sx=new Swimi ngXiYa ngya ng(); px.setXiYa ngya ng(cxyy); px.Operati on(); fx.setXiYangyang(px); fx.Operati on(); sx.setXiYa ngya ng(fx); sx.Operati on(); in terfaceXiYa ngya ng public void Operation()

19、; class Con creteXiYYimpleme nts XiYa ngya ng Override public void Operation() / TODOAuto-ge nerated method stub System. out .println(喜羊羊); abstract class Decorator impleme nts XiYa ngya ng protected XiYa ngya ng xyy; public void setXiYangyang(XiYangyang xyy) this . xyy =xyy; Override public void Op

20、eration() / TODOAuto-ge nerated method stub xyy .Operation(); class ProtectXiYa ngya ngexte nds Decorator Override public void Operation() / TODOAuto-ge nerated method stub System. out .print(有保護(hù)罩的”); super .Operation(); class FastXiYa ngya ngexte nds Decorator Override public void Operation() / TOD

21、OAuto-ge nerated method stub System. out .print(加速的”); super .Operation(); class Swimi ngXiYa ngya ngexte nds Decorator Override public void Operation() / TODOAuto-ge nerated method stub System. out .print(會(huì)游泳的”); super .Operation(); 【運(yùn)行截圖】 有保護(hù)罩的喜羊羊 加速的有保護(hù)罩的喜羊羊 會(huì)游泳的加速的有保護(hù)罩的喜羊羊 【實(shí)驗(yàn)小結(jié)】 裝飾模式的適用情況有: 當(dāng)需要

22、以不影響其他對(duì)象為前提實(shí)現(xiàn)動(dòng)態(tài)、透明地給單個(gè)對(duì)象添加職責(zé)時(shí) 當(dāng)需要將對(duì)象的某些職責(zé)進(jìn)行撤銷操作時(shí)。 當(dāng)不能用生成子類的方法進(jìn)行當(dāng)前系統(tǒng)的擴(kuò)充時(shí)。 實(shí)驗(yàn)六代理模式的應(yīng)用 【實(shí)驗(yàn)?zāi)康摹?1)掌握代理模式(Proxy)的特點(diǎn) 2)分析具體問題,使用代理模式進(jìn)行設(shè)計(jì)。 【實(shí)驗(yàn)內(nèi)容和要求】 生產(chǎn)商(Factory)需要銷售商品(Product),網(wǎng)上商城(E-Shop)提供了一個(gè)平臺(tái), 可以幫助銷售這些商品,獲得更大的銷量。當(dāng)顧客 (Custo m)從網(wǎng)上商城選購商品 的時(shí)候,實(shí)際是從生產(chǎn)商獲得的商品。應(yīng)用代理模式,用 C#控制臺(tái)應(yīng)用程序改 進(jìn)該設(shè)計(jì)。繪制該模式的UML圖。 【模式UM圖】 【實(shí)驗(yàn)代碼】

23、 public class ProxyTest01 public / static void TODCAuto-ge nerated method stub main( Stri ng args) E_shop es= new E_shop(); duct(); abstract class Product public abstract void product(); class Factoryexte nds Product Override public void product() / TODOAuto-ge nerated method stub System. out

24、.println(”商品正在促銷中,滿一百減50.); class E_shop exte nds Product private Factory factory ; public E_shop() factory =new Factory(); Override public void product() / TODOAuto-ge nerated method stub factory .product(); 【運(yùn)行截圖】 商品正在促銷中,滿一百堿56. 【實(shí)驗(yàn)小結(jié)】 代理模式的有以下幾種適用情況: 當(dāng)需要為一個(gè)對(duì)象在不同的地址空間提供局部的代表時(shí)。 當(dāng)需要?jiǎng)?chuàng)建開銷非常大的對(duì)象時(shí)。 當(dāng)需要

25、控制原始對(duì)象的訪問時(shí)。 當(dāng)需要再訪問對(duì)象時(shí)執(zhí)行一些附加操作時(shí),比如通過代理對(duì)象計(jì)算訪問實(shí)際 對(duì)象的次數(shù)。 實(shí)驗(yàn)七觀察者模式的應(yīng)用 【實(shí)驗(yàn)?zāi)康摹?1)掌握外觀模式(Observe)的特點(diǎn) 2)分析具體問題,使用外觀模式進(jìn)行設(shè)計(jì)。 【實(shí)驗(yàn)內(nèi)容和要求】 網(wǎng)上商店中如果商品(product)在名稱(name)、價(jià)格(price)等方面有變 化,系統(tǒng)能自動(dòng)通知會(huì)員,將是網(wǎng)上商店區(qū)別傳統(tǒng)商店的一大特色。 如何設(shè)計(jì)實(shí) 現(xiàn)?說明你所選擇的設(shè)計(jì)模式,畫出類關(guān)系圖并指明各個(gè)類的角色。應(yīng)用外觀 模式,用C#控制臺(tái)應(yīng)用程序改進(jìn)該設(shè)計(jì)。繪制該模式的 UML圖。 【模式UML圖】 【模式代碼】 import java.u

26、til.ArrayList; public class ObeserverTest public static void main( Stri ng args) / TODOAuto-ge nerated method stub cs.Attach( new Con creteObserver(cs, 1 號(hào)會(huì)員 cs.Attach( new Con creteObserver(cs, 2 號(hào)會(huì)員 cs.Attach( new Con creteObserver(cs, 3 號(hào)會(huì)員 cs.Attach( new Con creteObserver(cs, 4 號(hào)會(huì)員 cs.setState(

27、C+編程思想價(jià)錢下降 100 元”); ); ); ); ); Con creteSubject cs=new Con creteSubject(); cs.Notify(); abstract class Observer public abstract void update(); class ConcreteObserver extends Observer private String name; private String state ; private ConcreteSubject cs; public ConcreteSubject getConcreteSubject()

28、return cs; public void setConcreteSubject(ConcreteSubject cs) this . cs =cs; public ConcreteObserver(ConcreteSubject cs,String name) this . cs =cs; this . name=name; Override public void update() / TODOAuto-generated method stub state =cs .getState(); System. out .println( name+ 觀察到的狀態(tài)是: +state ); a

29、bstract class Subject private ArrayList observers =new ArrayList(); public void Attach(Observer o) observers .add(o); public void Detach(Observer o) observers .remove(o); / 通知 public void Notify() for ( int i = 0; i observers .size(); i+) observers .get(i).update(); class Con creteSubjectexte nds Su

30、bject private String state ; public void setState(String state) this . state =state; public Stri ng getState() return state ; 【運(yùn)行截圖】 號(hào)會(huì)員觀察到的狀態(tài)是:C+編程思想價(jià)錢下降100元 2號(hào)會(huì)員觀察到的狀態(tài)是C+編程思想價(jià)錢下降1G0元 3號(hào)會(huì)員觀察到的狀態(tài)是;C+編程思想價(jià)錢下降100元 4號(hào)會(huì)員觀察到的狀態(tài)是:C+編程核想價(jià)錢下降108元 【實(shí)驗(yàn)小結(jié)】 觀察者模式的適用情況有: 當(dāng)一個(gè)抽象模型有兩個(gè)方面,而其中一個(gè)方面必須依賴于另一個(gè)方面時(shí)。 當(dāng)對(duì)一個(gè)對(duì)象的改

31、變需要同時(shí)改變其他對(duì)象但是卻不知道具體有多少個(gè)對(duì) 象等到改變時(shí)。 當(dāng)一個(gè)對(duì)象必須通知其他對(duì)象但是卻不能與其他對(duì)象造成緊密耦合時(shí)。 實(shí)驗(yàn)八職責(zé)鏈模式的應(yīng)用 【實(shí)驗(yàn)?zāi)康摹?1) 掌握職責(zé)鏈模式(Chain of Responsibility)的特點(diǎn) 2) 分析具體問題,使用職責(zé)鏈模式進(jìn)行設(shè)計(jì)。 【實(shí)驗(yàn)內(nèi)容和要求】 高校學(xué)生請(qǐng)假需要符合學(xué)校規(guī)定,假如班主任可以批準(zhǔn)1天假,系主任可以 批準(zhǔn)7天假,各學(xué)院院長可以批準(zhǔn) 30天,學(xué)校校長可以批準(zhǔn)1年。應(yīng)用職責(zé)鏈 模式,用C#控制臺(tái)應(yīng)用程序?qū)崿F(xiàn)該設(shè)計(jì)。繪制該模式的 UML圖。 【模式UM圖】 Handler XlZhuRen + handleRequcst

32、()- void handl eftequ.es t # successor : Handler Handler + setSuccessor O : void void Abstract # successor : Handler + setSuccessor O : void + handle Han dler xzr=new XiZhuRe n(); Han dler xy=new XueYua n(); Han dler xx=new XueXiao(); fdy.setSuccessor(xzr); xzr.setSuccessor(xy); xy.setSuccessor(xx);

33、 for ( int i = 1; i 20; i+=2) fdy.ha ndleRequest(i); /處理請(qǐng)求的接口 abstract class Han dler protectedHan dlersuccessor ; public void setSuccessor(Handler successor this . successor =successor; public abstract void handleRequest( int request); class FuDaoYua n exte nds Han dler Override public void handleR

34、equest( int request) / TODOAuto-ge nerated method stub if (request=1) System. out .println( this .getClass().getSimpleName()+ 求+request); else if (this . successor != null ) System. out .println(this .getClass().getSimpleName()+ 無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者”); this . successor .handleRequest(request); class XiZh

35、uRe nexte nds Han dler Override public void handleRequest( int request) / TODOAuto-ge nerated method stub if (request=7) System. out .println( this .getClass().getSimpleName()+ 求+request); else if (this . successor != null ) System. out .println(this .getClass().getSimpleName()+ 無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者”); 處

36、理了請(qǐng) 自身 處理了請(qǐng) 自身 this . successor .handleRequest(request); class XueYuan extends Handler Override public void handleRequest( int request) / TODOAuto-generated method stub if (request=9) System. out .println( this .getClass().getSimpleName()+ 求 +request); else if ( this . successor != null ) System. ou

37、t .println( this .getClass().getSimpleName()+ 無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 ); this . successor .handleRequest(request); class XueXiao extends Handler Override public void handleRequest( int request) / TODOAuto-generated method stub if (request=15) System. out .println( this .getClass().getSimpleName()+ 求 +reques

38、t); else System. out .println( 該生請(qǐng)假時(shí)間太長,不能批準(zhǔn) ); 【運(yùn)行截圖】 FuDaoYuan 處理了請(qǐng)求 1 FuDaoYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XiZhuRen 處理了請(qǐng)求 3 FuDaoYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XiZhuRen 處理了請(qǐng)求 5 處理了請(qǐng) 自身 處理了請(qǐng) FuDaoYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XiZhuRen 處理了請(qǐng)求 7 FuDaoYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XiZhuRen 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XueYuan 處理了請(qǐng)求 9 FuDaoYua

39、n 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XiZhuRen 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XueYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XueXiao 處理了請(qǐng)求 11 FuDaoYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XiZhuRen 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XueYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XueXiao 處理了請(qǐng)求 13 FuDaoYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XiZhuRen 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XueYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XueXiao 處理了請(qǐng)求 15 FuDaoYuan 自身無法

40、滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XiZhuRen 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XueYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 該生請(qǐng)假時(shí)間太長,不能批準(zhǔn) FuDaoYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XiZhuRen 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 XueYuan 自身無法滿足請(qǐng)求,轉(zhuǎn)入下一個(gè)處理者 該生請(qǐng)假時(shí)間太長,不能批準(zhǔn) 【實(shí)驗(yàn)小結(jié)】 職責(zé)鏈模式主要適用于以下情況: 當(dāng)有多個(gè)對(duì)象可以處理同一個(gè)請(qǐng)求, 而具體哪個(gè)對(duì)象來處理這個(gè)請(qǐng)求在運(yùn)行 時(shí)刻需要自動(dòng)判定時(shí)。 當(dāng)需要在不明確接受者的情況下向多個(gè)對(duì)象中的某一個(gè)提交請(qǐng)求時(shí)。 當(dāng)處理一個(gè)請(qǐng)求的對(duì)象集合應(yīng)該動(dòng)態(tài)地被確定時(shí)。 實(shí)

41、驗(yàn)九訪問者模式的應(yīng)用 【實(shí)驗(yàn)?zāi)康摹?1) 掌握訪問者模式(Visitor)的特點(diǎn) 2) 分析具體問題,使用訪問者模式進(jìn)行設(shè)計(jì)。 【實(shí)驗(yàn)內(nèi)容和要求】 超市中有兩類商品,蘋果(Apple)和巧克力(Chocolate),顧客(Custom)將所選 商品放在購物車中(Shopping Cart),然后到收銀員(Cashier)處付款。在購物過程 中,顧客需要對(duì)這些商品進(jìn)行訪問,以便確認(rèn)這些商品的質(zhì)量,之后收銀員也需 要訪問購物車內(nèi)的商品,以便計(jì)算價(jià)格。應(yīng)用訪問者模式,用C#控制臺(tái)應(yīng)用程 序?qū)崿F(xiàn)該設(shè)計(jì)。繪制該模式的 UML圖。 【模式UM圖】 【模式代碼】 import java.util.Array

42、List; import java.util.List; public class ShoppingTest * param args */ public static void main(String args) / TODO Auto-generated method stub ShoppingCart sc=new ShoppingCart(); sc.Attach(new Apple(Apple); sc.Attach(new Chocolate(Chocolate); PersonVisitor pv=new Customer(); sc.accept(pv); PersonVisi

43、tor ps=new Cashier(); sc.accept(ps); abstract class PersonVisitor public abstract void visitorApple(Apple apple); public abstract void visitorChocolate(Chocolate chocolate); class Customer extends PersonVisitor Override public void visitorApple(Apple apple) 選購 選購 / TODO Auto-generated method stub Sy

44、stem.out.println(this.getClass().getSimpleName()+ +apple.getName(); Override public void visitorChocolate(Chocolate chocolate) / TODO Auto-generated method stub System.out.println(this.getClass().getSimpleName()+ +chocolate.getName(); class Cashier extends PersonVisitor Override public void visitorA

45、pple(Apple apple) / TODO Auto-generated method stub System.out.println(this.getClass().getSimpleName()+ +apple.getName()+收 銀); Override public void visitorChocolate(Chocolate chocolate) / TODO Auto-generated method stub System.out.println(this.getClass().getSimpleName()+ +chocolate.getName()+收銀 ); a

46、bstract class Shop protected String name; public Shop(String name) =name; public abstract void accpet(PersonVisitor pv); public String getName() return name; class Apple extends Shop public Apple(String name) super(name); / TODO Auto-generated constructor stub Override public void accpet(Pe

47、rsonVisitor pv) / TODO Auto-generated method stub pv.visitorApple(this); class Chocolate extends Shop public Chocolate(Stri ng n ame) super( name); / TODO Auto-ge nerated con structor stub Override public void accpet(Pers onV isitor pv) / TODO Auto-ge nerated method stub pv.visitorChocolate(this); c

48、lass Shopp in gCart List shops=new ArrayList(); public void Attach(Shop shop) shops.add(shop); public void Detach(Shop shop) shops.remove(shop); public void accept(Pers onV isitor visitor) for (i nt i = 0; i shops.size(); i+) shops.get(i).accpet(visitor); 【運(yùn)行截圖】 CustomeT 選購 Apple Customer 選購 Chocola

49、te Cashier對(duì)Apple收奄艮 Cashier 對(duì) Chocolate 收銀 【實(shí)驗(yàn)小結(jié)】 訪問者模式主要有以下幾種適用情況: 當(dāng)一個(gè)對(duì)象結(jié)構(gòu)包含有很多類對(duì)象,但是他們又不同的接口,并且開發(fā)人員 希望對(duì)這些對(duì)象實(shí)施一些依賴于具體類的操作時(shí)。 當(dāng)需要對(duì)一個(gè)對(duì)象結(jié)構(gòu)中的對(duì)象進(jìn)行很多不同的并且不相關(guān)的操作時(shí)。 當(dāng)該對(duì)象結(jié)構(gòu)被很多應(yīng)用共享時(shí)。 實(shí)驗(yàn)十備忘錄模式的應(yīng)用 【實(shí)驗(yàn)?zāi)康摹?1)掌握備忘錄模式(Memento)的特點(diǎn) 2)分析具體問題,使用備忘錄模式進(jìn)行設(shè)計(jì)。 【實(shí)驗(yàn)內(nèi)容和要求】 Window系統(tǒng)可能會(huì)異常終止,設(shè)計(jì)一個(gè)系統(tǒng)備份程序。類WindowsSystem 是發(fā)起人角色(Orign

50、ation),類Memento是備忘錄角色(Memento),類User是備 忘錄管理角色(Caretaker),應(yīng)用備忘錄模式,用C#控制臺(tái)應(yīng)用程序?qū)崿F(xiàn)該設(shè)計(jì)。 繪制該模式的UML圖。 【模式UM圖】 【模式代碼】 public class Win dowsMeme nto public static void main( Stri ng args) / TODCAuto-ge nerated method stub Win dowsSystem ws= new Win dowsSystem(); ws.setState( 開機(jī)正常工作”); ws.show(); User u= new U

51、ser(); u.setMeme ntoWi ndows(ws.createMeme ntoWi ndows(); ws.setState( 系統(tǒng)崩了??! ”); ws.show(); System. out .println(” 對(duì)系統(tǒng)進(jìn)行恢復(fù) 10s); ws.setMeme ntoWi ndows(u.getMeme ntoWi ndows(); ws.show(); /備忘錄類 class Meme ntoWi ndows private String state ; public Meme ntoWi ndows(Stri ng state) this . state =state;

52、 /獲取狀態(tài) public Stri ng getState() return state ; class Win dowsSystem private String state ; /建立狀態(tài)存儲(chǔ)對(duì)象 public Meme ntoWi ndows createMeme ntoWi ndows() return new MementoWindows( state ); /設(shè)置狀態(tài)存儲(chǔ)對(duì)象 public void setMementoWindows(MementoWindows mementoWindows) state =meme ntoWi ndows.getState(); /展現(xiàn)狀態(tài)

53、public void show() System. out .println(” 狀態(tài)為:+state ); /獲取狀態(tài) public Stri ng getState() return state ; /設(shè)置狀態(tài) public void setState(String state) this . state =state; class User private MementoWindows mementoWindows ; /設(shè)定備忘 public void setMementoWindows(MementoWindows mementoWindows) this . mementoWin

54、dows =mementoWindows; /獲取備忘 public Meme ntoWi ndows getMeme ntoWi ndows() return mementoWindows ; 【運(yùn)行截圖】 狀態(tài)為*開機(jī)正常工作 狀態(tài)為;系統(tǒng)崩了??! 對(duì)系統(tǒng)進(jìn)行恢復(fù)10s 狀態(tài)為:開機(jī)正常工作 【實(shí)驗(yàn)小結(jié)】 備忘錄模式有以下幾種適用情況: 當(dāng)必須保存一個(gè)對(duì)象在某一時(shí)刻的全部或部分狀態(tài)以便在需要時(shí)可以將其 回復(fù)到先前的狀態(tài)時(shí)。 當(dāng)使用接口讓其他對(duì)象直接得到自己的狀態(tài)會(huì)暴露對(duì)象的實(shí)現(xiàn)細(xì)節(jié)、繼而破 壞其封裝性。 假若有人問,你的一生有多長?請(qǐng)告訴他,只有三天,昨天,今天和明天。在這三天的生命里,昨天我們已經(jīng)浪費(fèi)掉了,明天不一定屬于你,那你的時(shí)間就只有今天,所以不珍惜今天的 這就像我們身處喧囂的鬧市,卻在渴望山清水秀的僻靜之地。心若靜,何處都是水云間,都是世外桃源,都是僻靜之所,心若浮躁,不管你居所何處,都難寧靜。 其實(shí),很多

溫馨提示

  • 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)論