設(shè)計(jì)模式實(shí)驗(yàn)三[共32頁(yè)]

上傳人:1528****253 文檔編號(hào):47345772 上傳時(shí)間:2021-12-20 格式:DOC 頁(yè)數(shù):33 大小:283KB
收藏 版權(quán)申訴 舉報(bào) 下載
設(shè)計(jì)模式實(shí)驗(yàn)三[共32頁(yè)]_第1頁(yè)
第1頁(yè) / 共33頁(yè)
設(shè)計(jì)模式實(shí)驗(yàn)三[共32頁(yè)]_第2頁(yè)
第2頁(yè) / 共33頁(yè)
設(shè)計(jì)模式實(shí)驗(yàn)三[共32頁(yè)]_第3頁(yè)
第3頁(yè) / 共33頁(yè)

下載文檔到電腦,查找使用更方便

12 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《設(shè)計(jì)模式實(shí)驗(yàn)三[共32頁(yè)]》由會(huì)員分享,可在線閱讀,更多相關(guān)《設(shè)計(jì)模式實(shí)驗(yàn)三[共32頁(yè)](33頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 CENTRAL SOUTH UNIVERSITY 《軟件體系結(jié)構(gòu)》實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)名稱 設(shè)計(jì)模式實(shí)驗(yàn)二 學(xué)生姓名 學(xué)生學(xué)號(hào) XXX 專業(yè)班級(jí) 軟件工程1007班 指導(dǎo)教師 劉偉 完成時(shí)間 2012年12月25日 實(shí)驗(yàn)三 設(shè)計(jì)模式實(shí)驗(yàn)二 一、實(shí)驗(yàn)?zāi)康? 熟練使用PowerDesigner和任意一種面向?qū)ο缶幊陶Z(yǔ)言實(shí)

2、現(xiàn)幾種常見(jiàn)的設(shè)計(jì)模式,包括外觀模式、代理模式、職責(zé)鏈模式、命令模式、迭代器模式、觀察者模式、策略模式和模板方法模式,理解每一種設(shè)計(jì)模式的模式動(dòng)機(jī),掌握模式結(jié)構(gòu),學(xué)習(xí)如何使用代碼實(shí)現(xiàn)這些模式,并學(xué)會(huì)分析這些模式的使用效果。 二、實(shí)驗(yàn)內(nèi)容 使用PowerDesigner和任意一種面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)外觀模式、代理模式、職責(zé)鏈模式、命令模式、迭代器模式、觀察者模式、策略模式和模板方法模式,包括根據(jù)實(shí)例繪制模式結(jié)構(gòu)圖、編寫模式實(shí)例實(shí)現(xiàn)代碼,運(yùn)行并測(cè)試模式實(shí)例代碼。 (1) 外觀模式 某軟件公司為新開(kāi)發(fā)的智能手機(jī)控制與管理軟件提供了一鍵備份功能,通過(guò)該功能可以將原本存儲(chǔ)在手機(jī)中的通信錄、短信

3、、照片、歌曲等資料一次性全部拷貝到移動(dòng)存儲(chǔ)介質(zhì)(例如MMC卡或SD卡)中。在實(shí)現(xiàn)過(guò)程中需要與多個(gè)已有的類進(jìn)行交互,例如通訊錄管理類、短信管理類等,為了降低系統(tǒng)的耦合度,試使用外觀模式來(lái)設(shè)計(jì)并編程模擬實(shí)現(xiàn)該一鍵備份功能。 (2) 代理模式 在某應(yīng)用軟件中需要記錄業(yè)務(wù)方法的調(diào)用日志,在不修改現(xiàn)有業(yè)務(wù)類的基礎(chǔ)上為每一個(gè)類提供一個(gè)日志記錄代理類,在代理類中輸出日志,如在業(yè)務(wù)方法method()調(diào)用之前輸出“方法method()被調(diào)用,調(diào)用時(shí)間為2010-10-10 10:10:10”,調(diào)用之后如果沒(méi)有拋異常則輸出“方法method()成功調(diào)用”,否則輸出“方法method()調(diào)用失敗”。在代理類中

4、調(diào)用真實(shí)業(yè)務(wù)類的業(yè)務(wù)方法,使用代理模式設(shè)計(jì)該日志記錄功能的結(jié)構(gòu),繪制類圖并編程模擬實(shí)現(xiàn)。 (3) 職責(zé)鏈模式 某企業(yè)的SCM(Supply Chain Management,供應(yīng)鏈管理)系統(tǒng)中包含一個(gè)采購(gòu)審批子系統(tǒng)。該企業(yè)的采購(gòu)審批是分級(jí)進(jìn)行的,即根據(jù)采購(gòu)金額的不同由不同層次的主管人員來(lái)審批,主任可以審批5萬(wàn)元以下(不包括5萬(wàn)元)的采購(gòu)單,副董事長(zhǎng)可以審批5萬(wàn)元至10萬(wàn)元(不包括10萬(wàn)元)的采購(gòu)單,董事長(zhǎng)可以審批10萬(wàn)元至50萬(wàn)元(不包括50萬(wàn)元)的采購(gòu)單,50萬(wàn)元及以上的采購(gòu)單就需要開(kāi)董事會(huì)討論決定。試使用職責(zé)鏈模式設(shè)計(jì)并實(shí)現(xiàn)該系統(tǒng)。 (4) 命令模式 某軟件公司欲開(kāi)發(fā)一個(gè)基于Win

5、dows平臺(tái)的公告板系統(tǒng)。系統(tǒng)提供一個(gè)主菜單(Menu),在主菜單中包含了一些菜單項(xiàng)(MenuItem),可以通過(guò)Menu類的addMenuItem()方法增加菜單項(xiàng)。菜單項(xiàng)的主要方法是click(),每一個(gè)菜單項(xiàng)包含一個(gè)抽象命令類,具體命令類包括OpenCommand(打開(kāi)命令),CreateCommand(新建命令),EditCommand(編輯命令)等,命令類具有一個(gè)execute()方法,用于調(diào)用公告板系統(tǒng)界面類(BoardScreen)的open()、create()、edit()等方法。試使用命令模式設(shè)計(jì)該系統(tǒng),使得MenuItem類與BoardScreen類的耦合度降低,繪制類圖

6、并編程模擬實(shí)現(xiàn)。 (5) 迭代器模式 在某在線購(gòu)物系統(tǒng)的購(gòu)物車(Shopping Cart)中包含了一個(gè)存儲(chǔ)商品名稱的字符串?dāng)?shù)組,現(xiàn)需要自定義一個(gè)雙向迭代器(MyIterator)實(shí)現(xiàn)對(duì)該商品名稱數(shù)組的雙向(前向和后向)遍歷。繪制類圖并編程模擬實(shí)現(xiàn)(要求定義抽象層)。 (6) 觀察者模式 某在線股票軟件需要提供如下功能:當(dāng)股票購(gòu)買者所購(gòu)買的某支股票價(jià)格變化幅度達(dá)到5%時(shí),系統(tǒng)將自動(dòng)發(fā)送通知(包括新價(jià)格)給購(gòu)買該股票的股民?,F(xiàn)使用觀察者模式設(shè)計(jì)該系統(tǒng),繪制類圖并編程模擬實(shí)現(xiàn)(要求定義抽象層)。 (7) 策略模式 某軟件公司欲開(kāi)發(fā)一款飛機(jī)模擬系統(tǒng),該系統(tǒng)主要模擬不同種類飛機(jī)的飛行特征與

7、起飛特征,需要模擬的飛機(jī)種類及其特征如表1所示: 表1 飛機(jī)種類及特征一覽表 飛機(jī)種類 起飛特征 飛行特征 直升機(jī)(Helicopter) 垂直起飛(VerticalTakeOff) 亞音速飛行(SubSonicFly) 客機(jī)(AirPlane) 長(zhǎng)距離起飛(LongDistanceTakeOff) 亞音速飛行(SubSonicFly) 殲擊機(jī)(Fighter) 長(zhǎng)距離起飛(LongDistanceTakeOff) 超音速飛行(SuperSonicFly) 鷂式戰(zhàn)斗機(jī)(Harrier) 垂直起飛(VerticalTakeOff) 超音速飛行(SuperSonic

8、Fly) 為將來(lái)能夠模擬更多種類的飛機(jī),試采用策略模式設(shè)計(jì)并模擬實(shí)現(xiàn)該飛機(jī)模擬系統(tǒng)。 (8) 模板方法模式 某軟件公司欲為某銀行的業(yè)務(wù)支撐系統(tǒng)開(kāi)發(fā)一個(gè)利息計(jì)算模塊,利息計(jì)算流程如下: I. 系統(tǒng)根據(jù)賬號(hào)和密碼驗(yàn)證用戶信息,如果用戶信息錯(cuò)誤,系統(tǒng)顯示出錯(cuò)提示; II. 如果用戶信息正確,則根據(jù)用戶類型的不同使用不同的利息計(jì)算公式計(jì)算利息(如活期賬戶和定期賬戶具有不同的利息計(jì)算公式); III. 系統(tǒng)顯示利息。 試使用模板方法模式設(shè)計(jì)并模擬實(shí)現(xiàn)該利息計(jì)算模塊。 三、實(shí)驗(yàn)要求 1. 正確無(wú)誤繪制外觀模式、代理模式、職責(zé)鏈模式、命令模式、迭代器模式、觀察者模式、策略模式和模板方法

9、模式實(shí)例的模式結(jié)構(gòu)圖; 2. 使用任意一種面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)外觀模式、代理模式、職責(zé)鏈模式、命令模式、迭代器模式、觀察者模式、策略模式和模板方法模式實(shí)例,代碼運(yùn)行正確無(wú)誤。 四、實(shí)驗(yàn)步驟 1. 進(jìn)一步熟悉PowerDesigner15的常用功能; 2. 使用PowerDesigner繪制外觀模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例; 3. 使用PowerDesigner繪制代理模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例; 4. 使用PowerDesigner繪制職責(zé)鏈模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例; 5. 使用PowerDesigner繪制命

10、令模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例; 6. 使用PowerDesigner繪制迭代器模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例; 7. 使用PowerDesigner繪制觀察者模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例; 8. 使用PowerDesigner繪制策略模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例; 9. 使用PowerDesigner繪制模板方法模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例。 五、實(shí)驗(yàn)報(bào)告要求 1. 提供外觀模式實(shí)例結(jié)構(gòu)圖及實(shí)現(xiàn)代碼; 2. 提供代理模式實(shí)例結(jié)構(gòu)圖及實(shí)現(xiàn)代碼; 3. 提供職責(zé)鏈模式實(shí)例結(jié)構(gòu)圖及

11、實(shí)現(xiàn)代碼; 4. 提供命令模式實(shí)例結(jié)構(gòu)圖及實(shí)現(xiàn)代碼; 5. 提供迭代器模式實(shí)例結(jié)構(gòu)圖及實(shí)現(xiàn)代碼; 6. 提供觀察者模式實(shí)例結(jié)構(gòu)圖及實(shí)現(xiàn)代碼; 7. 提供策略模式實(shí)例結(jié)構(gòu)圖及實(shí)現(xiàn)代碼; 8. 提供模板方法模式實(shí)例結(jié)構(gòu)圖及實(shí)現(xiàn)代碼; 9. 注意調(diào)整類圖中文字的字體及字號(hào),注意圖的整體布局和圖的大小,避免使用交叉線,注意代碼字體和顏色,代碼字體需一致,顏色需統(tǒng)一; 10. 認(rèn)真寫好實(shí)驗(yàn)總結(jié); 11. 提交電子版實(shí)驗(yàn)報(bào)告,格式為“學(xué)號(hào)-姓名-實(shí)驗(yàn)3.doc”,如“060102-張三-實(shí)驗(yàn)3.doc”,所有材料(包括類圖和源代碼)均放在一個(gè)Word文件中,格式為doc或docx,不需要提

12、交PowerDeigner所保存的oom模型,也無(wú)須單獨(dú)提交源代碼。 六、實(shí)驗(yàn)結(jié)果 1. 類圖: 實(shí)現(xiàn)代碼: Client.java package dm.facade; public class Client { public static void main(String[] args) { BackupFacade bf = new BackupFacade(); bf.oneKeyBackup(); } } BackupFacade.java package dm.facade; public class BackupFacade

13、{ private SmsManager sms; private SongsManager song; private ContactManager contact; private PhotoManager photo; public BackupFacade() { sms = new SmsManager(); song = new SongsManager(); contact = new ContactManager(); photo = new PhotoManager(); } public void oneKeyBack

14、up() { sms.oneKeyBackup(); song.oneKeyBackup(); contact.oneKeyBackup(); photo.oneKeyBackup(); } } SmsManager.java package dm.facade; public class SmsManager { public void oneKeyBackup() { System.out.println("Sms Backup Over"); } } SongsManager.java package dm.facade;

15、 public class SongsManager { public void oneKeyBackup() { System.out.println("Songs Backup Over"); } } PhotoManager.java package dm.facade; public class PhotoManager { public void oneKeyBackup() { // TODO: implement System.out.println("Photo Backup Over"); } } Co

16、ntactManager.java package dm.facade; public class ContactManager { public void oneKeyBackup() { System.out.println("Contact Backup Over"); } } 2. 類圖: 實(shí)現(xiàn)代碼: Client.java package dm.proxy; public class Client { public static void main(String[] args) { Service service; servic

17、e = new Proxy(); service.method(); } } Proxy.java package dm.proxy; public class Proxy implements Service { private RealService service = new RealService(); public void method() { service.method(); } } Service.java package dm.proxy; public interface Service { void method(

18、); } RealService.java package dm.proxy; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; public class RealService implements Service { public void method() { try { Date date = new Date(); // format對(duì)象是用來(lái)以指定的時(shí)間格式格式化時(shí)間的 SimpleDateFormat from =

19、 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 這里的格式可以自己設(shè)置 // format()方法是用來(lái)格式化時(shí)間的方法 String times = from.format(date); System.out.println("方法method()被調(diào)用,調(diào)用時(shí)間為:" + times); //用來(lái)產(chǎn)生除零異常來(lái)模擬method方法調(diào)用是否成功 Random random = new Random(); int a = random.nextInt(100); int

20、b = random.nextInt(10); @SuppressWarnings("unused") int c = a/b; System.out.println("方法method()成功調(diào)用"); } catch (Exception e) { // TODO: handle exception System.out.println("方法method()調(diào)用失敗"); } }} 3. 類圖: 實(shí)現(xiàn)代碼: Client.java package dm.chainofresponsibility; public

21、class Client { public static void main(String[] args) { Leader objDirector, objDepartmentManager, objGeneralManager; objDirector = new Director("張三"); objDepartmentManager = new Manager("李四"); objGeneralManager = new GeneralManager("王五"); objDirector.setSuccessor(objDepartmentMa

22、nager); objDepartmentManager.setSuccessor(objGeneralManager); System.out.println("---------------------------------------------"); PurchaseRequest shopping1 = new PurchaseRequest(10000.00, "購(gòu)買打印紙"); objDirector.handleRequest(shopping1); System.out.println("--------------------------

23、-------------------"); PurchaseRequest shopping2 = new PurchaseRequest(80000.00, "辦公室配置空調(diào)"); objDirector.handleRequest(shopping2); System.out.println("---------------------------------------------"); PurchaseRequest shopping3 = new PurchaseRequest(150000.00, "車間維修"); objDirector.handl

24、eRequest(shopping3); System.out.println("---------------------------------------------"); PurchaseRequest shopping4 = new PurchaseRequest(10000000.00, "收購(gòu)RL公司"); objDirector.handleRequest(shopping4); System.out.println("---------------------------------------------"); } } PurchaseR

25、equest.java package dm.chainofresponsibility; public class PurchaseRequest { private double billMoney; private String reason; public PurchaseRequest(double billMoney, String reason) { this.billMoney = billMoney; this.reason = reason; } public double getBillMoney() { return bil

26、lMoney; } public void setBillMoney(double billMoney) { this.billMoney = billMoney; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } } Leader.java package dm.chainofresponsibility; public abstract class Le

27、ader { protected String name; protected Leader successor; public void setSuccessor(Leader seccessor) { this.successor = seccessor; } public Leader(String name) { this.name = name; } public abstract void handleRequest(PurchaseRequest request); } Manager.java package dm.

28、chainofresponsibility; public class Manager extends Leader { public Manager(String name) { super(name); } public void handleRequest(PurchaseRequest request) { if (request.getBillMoney() < 100000.00) { System.out.println("總經(jīng)理" + name + "處理物資采購(gòu):" + request.getReason() + ",批準(zhǔn)采購(gòu)

29、資金為:" + request.getBillMoney() + "RMB"); } else { if (this.successor != null) { this.successor.handleRequest(request); } } } } GeneralManager.java package dm.chainofresponsibility; public class GeneralManager extends Leader { public GeneralManager(String name) { super

30、(name); } public void handleRequest(PurchaseRequest request) { if (request.getBillMoney() < 500000.00) { System.out.println("總經(jīng)理" + name + "處理物資采購(gòu):" + request.getReason() + ",批準(zhǔn)采購(gòu)資金為:" + request.getBillMoney() + "RMB"); } else { System.out.println("董事會(huì)將開(kāi)會(huì)處理物資采購(gòu):" + request.

31、getReason() + ",批準(zhǔn)采購(gòu)資金為:" + request.getBillMoney() + "RMB"); } } } Director.java package dm.chainofresponsibility; public class Director extends Leader { public Director(String name) { super(name); } public void handleRequest(PurchaseRequest request) { if (request.getB

32、illMoney() < 50000.00) { System.out.println("主任" + name + "處理物資采購(gòu):" + request.getReason() + ",批準(zhǔn)采購(gòu)資金為:" + request.getBillMoney() + "RMB"); } else { if (this.successor != null) { this.successor.handleRequest(request); } } } } 4. 類圖: 實(shí)現(xiàn)代碼: Client.java package ma

33、nd; public class Client { public static void main(String[] args) { BoardScreen screen = new BoardScreen(); Menu menu = new Menu(); MenuItem open = new MenuItem("open", new OpenCommand(screen)); MenuItem create = new MenuItem("create", new CreateCommand(screen)); MenuItem edit = new

34、 MenuItem("edit", new EditCommand(screen)); menu.addMenuItem(open); menu.addMenuItem(create); menu.addMenuItem(edit); menu.getMenuItemByName("open").click(); menu.getMenuItemByName("create").click(); menu.getMenuItemByName("edit").click(); } } Menu.java package mand; import

35、 java.util.*; public class Menu { private ArrayList menuItemList = new ArrayList(); public void addMenuItem(MenuItem item) { // TODO: implement this.menuItemList.add(item); } public MenuItem getMenuItemByName(String itemName) { // TODO: implement for (int i

36、 = 0; i < menuItemList.size(); i++) { if (menuItemList.get(i).getItemName().equals(itemName)) { return menuItemList.get(i); } } return null; } } MenuItem.java package mand; public class MenuItem { private String itemName; private Command command; public void click(

37、) { // TODO: implement System.out.println("MenuItem " + this.itemName + " clicked!"); mand.execute(); } public MenuItem(String name, Command cmd) { // TODO: implement mand = cmd; this.itemName = name; } public String getItemName() { return itemName; } public vo

38、id setItemName(String newItemName) { itemName = newItemName; } public Command getCommand() { return command; } public void setCommand(Command newCommand) { mand = newCommand; } } Command.java package mand; public interface Command { void execute(); } CreateCommand.

39、java package mand; public class CreateCommand implements Command { private BoardScreen myBoardScreen; public CreateCommand(BoardScreen myBoardScreen) { this.myBoardScreen = myBoardScreen; } public void execute() { // TODO: implement myBoardScreen.create(); } } EditCommand.

40、java package mand; public class EditCommand implements Command { private BoardScreen myBoardScreen; public EditCommand(BoardScreen myBoardScreen){ this.myBoardScreen = myBoardScreen; } public void execute() { // TODO: implement myBoardScreen.edit(); } } OpenCommand.java

41、 package mand; public class OpenCommand implements Command { private BoardScreen myBoardScreen; public OpenCommand(BoardScreen myBoardScreen) { this.myBoardScreen = myBoardScreen; } public void execute() { // TODO: implement myBoardScreen.open(); } } BoardScreen.java packa

42、ge mand; public class BoardScreen { public void open() { // TODO: implement System.out.println("BoardScreen opened!"); } public void create() { // TODO: implement System.out.println("BoardScreen create!"); } public void edit() { // TODO: implement System.out.println(

43、"BoardScreen edit!"); } } 5. 類圖: 實(shí)現(xiàn)代碼: Client.java package dm.iterator; public class Client { public static void main(String[] args) { MyCollection collection = new NewCollection(); MyIterator i = collection.createIterator(); System.out.println("正向遍歷----------------

44、---------"); i.first(); System.out.print(i.getCurrentItem().toString() + " "); while (i.hasNext()) { i.next(); System.out.print(i.getCurrentItem().toString() + " "); } System.out.println("\n逆向遍歷-------------------------"); i.last(); System.out.print(i.getCurrentItem().to

45、String() + " "); while (i.hasPrevious()) { i.previous(); System.out.print(i.getCurrentItem().toString() + " "); } System.out.println(); } } MyIterator.java package dm.iterator; public interface MyIterator { void first(); void last(); boolean hasNext(); boolean hasPre

46、vious(); void next(); void previous(); boolean isFirst(); boolean isLast(); Object getCurrentItem(); } MyCollection.java package dm.iterator; public interface MyCollection { MyIterator createIterator(); } NewCollection.java package dm.iterator; public class NewCollection impl

47、ements MyCollection { private Object[] obj = { "I", "P", "h", "o", "n", "e" }; public MyIterator createIterator() { // TODO: implement return new NewIterator(); } // 內(nèi)部類迭代器 public class NewIterator implements MyIterator { private int currentIndex = 0; public void first() {

48、 // TODO: implement currentIndex = 0; } public void last() { // TODO: implement currentIndex = obj.length - 1; } public boolean hasNext() { // TODO: implement if (currentIndex < obj.length - 1) { return true; } return false; } public boolea

49、n hasPrevious() { // TODO: implement if (currentIndex > 0) { return true; } return false; } public void next() { // TODO: implement if (currentIndex < obj.length) { currentIndex++; } } public void previous() { // TODO: implement if (current

50、Index > 0) { currentIndex--; } } public boolean isFirst() { // TODO: implement return currentIndex == 0; } public boolean isLast() { // TODO: implement return currentIndex == obj.length - 1; } public Object getCurrentItem() { // TODO: implement

51、 return obj[currentIndex]; } } } 6. 類圖: 實(shí)現(xiàn)代碼: Client.java package dm.observer; public class Client { public static void main(String[] args) { // TODO Auto-generated method stub Stock stock = new Stock(1000.0); new Stocker("zhangsan", stock); new Stocker("lisi", sto

52、ck); stock.setPrice(1234.0); stock.setPrice(1234.5); stock.setPrice(999.9); stock.setPrice(1111.1); } } Observer.java package dm.observer; public interface Observer { void response(); } Subject.java package dm.observer; import java.util.*; public abstract class Subject {

53、 private Vector vector = new Vector(); public void addObserver(Observer observer) { // TODO: implement this.vector.add(observer); } public void deleteObserver(Observer observer) { // TODO: implement this.vector.remove(observer); } public void fireNoti

54、ce() { for(int i=0;i

55、 = price; } public double getPrice() { return price; } public void setPrice(double newPrice) { double change = this.price - newPrice; price = newPrice; if (change / this.price > 0.05 || change / this.price < -0.05) { super.fireNotice(); } } } Stocker.java packag

56、e dm.observer; public class Stocker implements Observer { private String name; private Stock subject; public Stock stock; public Stocker(String name, Stock subject) { // TODO: implement this.name = name; this.subject = subject; subject.addObserver(this); } public void resp

57、onse() { // TODO: implement System.out.println("股民 " + name + " 被通知股票發(fā)生了變化,新價(jià)格為:" + subject.getPrice()); } } 7. 類圖: 實(shí)現(xiàn)代碼: Client.java package dm.strategy; public class Client { public static void main(String[] args) { // TODO Auto-generated method stub FlyBehavior fly

58、Behavior; flyBehavior = new SubSonicFly(); TakeOffBehavior takeOffBehavior; takeOffBehavior = new VerticalTakeOff(); new Helicopter(flyBehavior, takeOffBehavior); System.out.println("-------------------------"); flyBehavior = new SubSonicFly(); takeOffBehavior = new LongDistance

59、TakeOff(); new AirPlane(flyBehavior, takeOffBehavior); System.out.println("-------------------------"); flyBehavior = new SuperSonicFly(); takeOffBehavior = new LongDistanceTakeOff(); new Fighter(flyBehavior, takeOffBehavior); System.out.println("-------------------------"); fly

60、Behavior = new SuperSonicFly(); takeOffBehavior = new VerticalTakeOff(); new Harrier(flyBehavior, takeOffBehavior); } } AirCraft.java package dm.strategy; public class AirCraft { private FlyBehavior flyBehavior; private TakeOffBehavior takeOffBehavior; public AirCraft(FlyBehavior

61、 flyBehavior, TakeOffBehavior takeOffBehavior) { this.flyBehavior = flyBehavior; this.takeOffBehavior = takeOffBehavior; } public FlyBehavior getFlyBehavior() { return flyBehavior; } public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; }

62、 public TakeOffBehavior getTakeOffBehavior() { return takeOffBehavior; } public void setTakeOffBehavior(TakeOffBehavior takeOffBehavior) { this.takeOffBehavior = takeOffBehavior; } } FlyBehavior.java package dm.strategy; public class FlyBehavior { public void fly() { // TODO

63、: implement System.out.println("飛機(jī)飛行"); } } TakeOffBehavior.java package dm.strategy; public class TakeOffBehavior { public void takeOff() { // TODO: implement System.out.println("飛機(jī)起飛"); } } VerticalTakeOff.java package dm.strategy; public class VerticalTakeOff extends Ta

64、keOffBehavior { public void takeOff() { // TODO: implement System.out.println("垂直起飛(VerticalTakeOff)"); } } SubSonicFly.java package dm.strategy; public class SubSonicFly extends FlyBehavior { public void fly() { // TODO: implement System.out.println("亞音速飛行(SubSonicFly)");

65、} } LongDistanceTakeOff.java package dm.strategy; public class LongDistanceTakeOff extends TakeOffBehavior { public void takeOff() { // TODO: implement System.out.println("長(zhǎng)距離起飛(LongDistanceTakeOff)"); } } SuperSonicFly.java package dm.strategy; public class SuperSonicFly extends

66、 FlyBehavior { public void fly() { // TODO: implement System.out.println("超音速飛行(SuperSonicFly)"); } } AirPlane.java package dm.strategy; public class AirPlane extends AirCraft { public AirPlane(FlyBehavior flyBehavior, TakeOffBehavior takeOffBehavior) { super(flyBehavior, takeOffBehavior); System.out.println("客機(jī)(AirPlane)"); flyBehavior.fly(); takeOffBehavior.tak

展開(kāi)閱讀全文
溫馨提示:
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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!