当前位置:文档之家› [vip专享]java设计模式实验报告

[vip专享]java设计模式实验报告

实验二 设计模式上机实验二一、实验目的使用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()。使用装饰模式设计该系统,绘制类图并编程实现。

0..10..*Book

++borrowBook ()returnBook (): void: void

BookDirector{abstract}

-book: Book+++<><><>BookDirector (Book book)borrowBook ()returnBook (): void: void

MyBook++<><>borrowBook ()returnBook (): void: void

NewBook+++<>NewBook (Book book)freeze ()lose (): void: void

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..1

0..*0..1

0..*0..10..*

MainFrame----memorycpudiskos: Memory: CPU: HardDisk: OS

++on ()off (): void: void

Memory++check ()off (): void: voidCPU++run ()off (): void: voidHardDisk++read ()off (): void: void

OS++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();

相关主题