当前位置:文档之家› 设计模式上机实验二实验报告

设计模式上机实验二实验报告

设计模式实验二实验报告书专业班级软件0703学号3901070324 姓名吉亚云指导老师伟时间2010年4月24日中南大学软件学院实验二设计模式上机实验二一、实验目的使用PowerDesigner和任意一种面向对象编程语言实现几种常用的设计模式,加深对这些模式的理解,包括装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式。

二、实验内容使用PowerDesigner和任意一种面向对象编程语言实现装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式,包括根据实例绘制相应的模式结构图、编写模式实现代码,运行并测试模式实例代码。

三、实验要求1. 正确无误绘制装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式的模式结构图;2. 使用任意一种面向对象编程语言实现装饰模式、外观模式、代理模式、职责链模式、命令模式、迭代器模式、观察者模式、状态模式、策略模式和模板方法模式,代码运行正确无误。

四、实验步骤1. 使用PowerDesigner绘制装饰模式结构图并用面向对象编程语言实现该模式;2. 使用PowerDesigner绘制外观模式结构图并用面向对象编程语言实现该模式;3. 使用PowerDesigner绘制代理模式结构图并用面向对象编程语言实现该模式;4. 使用PowerDesigner绘制职责链模式结构图并用面向对象编程语言实现该模式;5. 使用PowerDesigner绘制命令模式结构图并用面向对象编程语言实现该模式;6. 使用PowerDesigner绘制迭代器模式结构图并用面向对象编程语言实现该模式;7. 使用PowerDesigner绘制观察者模式结构图并用面向对象编程语言实现该模式;8. 使用PowerDesigner绘制状态模式结构图并用面向对象编程语言实现该模式;9. 使用PowerDesigner绘制策略模式结构图并用面向对象编程语言实现该模式;10. 使用PowerDesigner绘制模板方法模式结构图并用面向对象编程语言实现该模式。

五、实验报告要求1. 提供装饰模式结构图及实现代码;2. 提供外观模式结构图及实现代码;3. 提供代理模式结构图及实现代码;4. 提供职责链模式结构图及实现代码;5. 提供命令模式结构图及实现代码;6. 提供迭代器模式结构图及实现代码;7. 提供观察者模式结构图及实现代码;8. 提供状态模式结构图及实现代码;9. 提供策略模式结构图及实现代码;10. 提供模板方法模式结构图及实现代码。

六、实验结果(1) 装饰模式某图书管理系统中,书籍类(Book)具有借书方法borrowBook()和还书方法returnBook() 。

现需要动态给书籍对象添加冻结方法freeze()和遗失方法lose()。

使用装饰模式设计该系统,绘制类图并编程实现。

package DirectorPattern;interface Book{void borrowBook();void returnBook();}final class MyBook implements Book{public void borrowBook(){System.out.println("MyBook borrowing!");}public void returnBook(){System.out.println("MyBook returning!");}}abstract class BookDirector implements Book{private 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 BookDirector{public NewBook(Book book){super(book);System.out.println("Book changed to NewBook!");}public void freeze(){System.out.println("Book freezing!");}public void lose(){System.out.println("Book lost!");}}public class BookDirectorClient {public static void main(String a[]){//半透明Book book=new MyBook();NewBook newBook=new NewBook(book);newBook.borrowBook();newBook.returnBook();newBook.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 ()off (): void: voidMemory++check ()off (): void: voidCPU++run ()off (): void: voidHardDisk++read ()off (): void: voidOS++load ()off (): void: void package FacadePattern;class Mainframe {private Memory memory;private CPU cpu;private HardDisk disk;private OS os;public Mainframe(){memory=new Memory() ;cpu=new 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{public void run(){System.out.println("CPU running!");}public void off(){System.out.println("CPU off!");}}class HardDisk{public void read(){System.out.println("HardDisk reading!");}public void off(){System.out.println("HardDisk off!");}}class OS{public void load(){System.out.println("OS loading!");}public void off(){System.out.println("OS off!");}}public class ComputerFacadeClient{public static void main(String args[]){Mainframe mainframe=new Mainframe();mainframe.on();System.out.println("-----------------------");mainframe.off();}}运行结果:(3) 代理模式应用软件所提供的桌面快捷方式是快速启动应用程序的代理,桌面快捷方式一般使用一张小图片来表示(Picture),通过调用快捷方式的run()方法将调用应用软件(Application)的run()方法。

使用代理模式模拟该过程,绘制类图并编程实现。

0..10..*Software+run (): voidProxy-app: Application+<<Implement>>run (): voidApplication+<<Implement>>run (): voidpackage ProxyPattern;interface Software{void run();}class Application implements Software{public void run(){System.out.println("Application is running!");;}}class Picture implements Software{private Application app=new Application();public void run(){app.run();}}public class FastwayProxyClient{public static void main(String a[]){Software proxy=new Picture();proxy.run();}}运行结果:(4) 职责链模式某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开会确定。

相关主题