《设计模式上机实验二实验报告》由会员分享,可在线阅读,更多相关《设计模式上机实验二实验报告(31页珍藏版)》请在金锄头文库上搜索。
1、1设计模式实验二实 验 报告 书专业班级 软 件 0703 学 号 3901070324 姓 名 吉亚云 指导老师 刘 伟 时 间 2010 年 4 月 24 日 中南大学软件学院2实验二 设计模式上机实验二一、实验目的使用 PowerDesigner 和任意一种面向对象编程语言实现几种常用的设计模式,加深对这些模式的理解,包括装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式。二、实验内容使用 PowerDesigner 和任意一种面向对象编程语言实现装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式
2、、策略模式和模板方法模式,包括根据实例绘制相应的模式结构图、编写模式实现代码,运行并测试模式实例代码。三、实验要求1. 正确无误绘制装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式的模式结构图;2. 使用任意一种面向对象编程语言实现装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式,代码运行正确无误。四、实验步骤1. 使用 PowerDesigner 绘制装饰模式结构图并用面向对象编程语言实现该模式;2. 使用 PowerDesigner 绘制外观模式结构图并用面向对象编程语言
3、实现该模式;3. 使用 PowerDesigner 绘制代理模式结构图并用面向对象编程语言实现该模式;4. 使用 PowerDesigner 绘制职责链模式结构图并用面向对象编程语言实现该模式;5. 使用 PowerDesigner 绘制命令模式结构图并用面向对象编程语言实现该模式;6. 使用 PowerDesigner 绘制迭代器模式结构图并用面向对象编程语言实现该模式;7. 使用 PowerDesigner 绘制观察者模式结构图并用面向对象编程语言实现该模式;8. 使用 PowerDesigner 绘制状态模式结构图并用面向对象编程语言实现该模式;9. 使用 PowerDesigner 绘
4、制策略模式结构图并用面向对象编程语言实现该模式;10. 使用 PowerDesigner 绘制模板方法模式结构图并用面向对象编程语言实现该模式。五、实验报告要求1. 提供装饰模式结构图及实现代码;2. 提供外观模式结构图及实现代码;33. 提供代理模式结构图及实现代码;4. 提供职责链模式结构图及实现代码;5. 提供命令模式结构图及实现代码;6. 提供迭代器模式结构图及实现代码;7. 提供观察者模式结构图及实现代码;8. 提供状态模式结构图及实现代码;9. 提供策略模式结构图及实现代码;10. 提供模板方法模式结构图及实现代码。六、实验结果(1) 装饰模式某图书管理系统中,书籍类(Book)具
5、有借书方法 borrowBook()和还书方法 returnBook() 。现需要动态给书籍对象添加冻结方法 freeze()和遗失方法 lose()。使用装饰模式设计该系统,绘制类图并编程实现。0.10.*Book+borrowBook ()returnBook (): void: voidBookDirectorabstract - book : Book+BookDirector (Book book)borrowBook ()returnBook (): void: voidMyBook+borrowBook ()returnBook (): void: voidNewBook+ Ne
6、wBook (Book book)freeze ()lose (): void: voidpackage DirectorPattern;interface Bookvoid borrowBook();void returnBook();final class MyBook implements Book4public void borrowBook()System.out.println(MyBook borrowing!);public void returnBook()System.out.println(MyBook returning!); abstract class BookDi
7、rector implements Bookprivate Book book;public BookDirector(Book book)System.out.println(Book directoring!);this.book=book;public void borrowBook()book.borrowBook();public void returnBook()book.returnBook();class NewBook extends BookDirectorpublic NewBook(Book book)super(book);System.out.println(Boo
8、k changed to NewBook!);public void freeze()System.out.println(Book freezing!);public void lose()System.out.println(Book lost!);5public class BookDirectorClient public static void main(String a)/半透明Book book=new MyBook(); NewBook newBook=new NewBook(book);newBook.borrowBook();newBook.returnBook(); ne
9、wBook.freeze();newBook.lose();运行结果:(2) 外观模式在电脑主机(Mainframe)中,只需要按下主机的开机按钮(on(),即可调用其他硬件设备和软件的启动方法,如内存(Memory) 的自检(check() ,CPU 的运行(run(),硬盘(HardDisk)的读取(read(),操作系统(OS)的载入(load()等,如果某一过程发生错误则电脑启动失败。使用外观模式模拟该过程,绘制类图并编程实现。0.10.*0.10.*0.10.*0.10.*MainFrame-memorycpudiskos: Memory: CPU: HardDisk: OS+on
10、()off (): void: voidMemory+check ()off (): void: voidCPU+run ()off (): void: voidHardDisk+read ()off (): void: voidOS+load ()off (): void: voidpackage FacadePattern;class Mainframe 6private Memory memory;private CPU cpu;private HardDisk disk;private OS os;public Mainframe()memory=new Memory() ;cpu=n
11、ew CPU() ;disk=new HardDisk() ;os=new OS() ;public void on()memory.check(); cpu.run();disk.read();os.load(); public void off()memory.off(); cpu.off();disk.off();os.off(); class Memory public void check()System.out.println( Memory checking! );public void off()System.out.println(Memory off!);class CPU
12、7public void run()System.out.println(CPU running!);public void off()System.out.println(CPU off!);class HardDiskpublic void read()System.out.println(HardDisk reading!);public void off()System.out.println(HardDisk off!);class OSpublic void load()System.out.println(OS loading!);public void off()System.
13、out.println(OS off!);public class ComputerFacadeClientpublic static void main(String args)Mainframe mainframe=new Mainframe();8mainframe.on();System.out.println(-);mainframe.off();运行结果:(3) 代理模式应用软件所提供的桌面快捷方式是快速启动应用程序的代理,桌面快捷方式一般使用一张小图片来表示(Picture),通过调用快捷方式的 run()方法将调用应用软件(Application) 的run()方法。使用代理模
14、式模拟该过程,绘制类图并编程实现。0.1 0.*Software+ run () : voidProxy- app : Application+ run () : voidApplication+ run () : voidpackage ProxyPattern;interface Softwarevoid run(); class Application implements Softwarepublic void run()System.out.println(Application is running!);9class Picture implements Softwarepriva
15、te Application app=new Application();public void run()app.run();public class FastwayProxyClientpublic static void main(String a)Software proxy=new Picture();proxy.run();运行结果:(4) 职责链模式某物资管理系统中物资采购需要分级审批,主任可以审批 1 万元及以下的采购单,部门经理可以审批 5 万元及以下的采购单,副总经理可以审批 10 万元及以下的采购单,总经理可以审批 20 万元及以下的采购单,20 万元以上的采购单需要开会确定。现使用职责链模式设计该系统,绘制类图并编程实现。10Leader- namesuccessor : String: Leader+ handleRequest (ShoppingRequest request)setSuccessor (Leader successor)Leader (String name): v