设计模式上机实验二实验报告 - 下载本文

设计模式实验二

实 验 报 告 书

专业班级 软 件 0703 学 号 3901070324 姓 名 吉亚云 指导老师 刘 伟 时 间 2010年4月 24日

中南大学软件学院

1

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

一、实验目的

使用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. 提供职责链模式结构图及实现代码;

2

5. 提供命令模式结构图及实现代码; 6. 提供迭代器模式结构图及实现代码; 7. 提供观察者模式结构图及实现代码; 8. 提供状态模式结构图及实现代码; 9. 提供策略模式结构图及实现代码; 10. 提供模板方法模式结构图及实现代码。

六、实验结果

(1) 装饰模式

某图书管理系统中,书籍类(Book)具有借书方法borrowBook()和还书方法returnBook() 。现需要动态给书籍对象添加冻结方法freeze()和遗失方法lose()。使用装饰模式设计该系统,绘制类图并编程实现。

Book+borrowBook (): void+returnBook (): void0..*0..1MyBook+<>borrowBook (): void+<>returnBook (): voidBookDirector{abstract} -book: Book+<>BookDirector (Book book)+<>borrowBook (): void+<>returnBook (): voidNewBook+<>NewBook (Book book)+freeze (): void+lose (): void package DirectorPattern; interface Book { }

final class MyBook implements Book {

void borrowBook(); void returnBook();

public void borrowBook(){ }

3

System.out.println(\);

}

public void returnBook(){ }

System.out.println(\);

abstract class BookDirector implements Book { }

class NewBook extends BookDirector { }

public class BookDirectorClient {

public static void main(String a[]) public NewBook(Book book) { }

public void freeze() { }

public void lose() { }

System.out.println(\); System.out.println(\); super(book);

System.out.println(\);

private Book book;

public BookDirector(Book book) { }

public void borrowBook(){ }

public void returnBook(){ }

book.returnBook(); book.borrowBook();

System.out.println(\); this.book=book;

4

}

{ }

//半透明

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())等,如果某一过程发生错误则电脑启动失败。使用外观模式模拟该过程,绘制类图并编程实现。

MainFrame----memorycpudiskos: Memory: CPU: HardDisk: OS+on (): void+off (): void0..10..10..10..*HardDisk+read (): void+off (): void0..10..*Memory+check (): void+off (): voidCPU0..*0..*OS+load (): void+off (): void+run (): void+off (): void

package FacadePattern;

class Mainframe {

private Memory memory;

private CPU cpu; private HardDisk disk;

5