实验2_软工1302_2013011342_阮翀

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

课程名称java设计模式

实验项目观察者模式与装饰模式的应用实验仪器 PC个人终端

系别计算机学院

专业软件工程

班级/学号软工1302/2013011342 学生姓名阮翀

实验日期 2015-10-12 成绩

指导教师张志华

实验二观察者模式与装饰模式的应用

一、实验目的

通过该实验,理解观察者模式和装饰模式的意图、结构,在软件开发中使用这些模式并进行功能验证。

二、实验内容

1.猫、狗与老鼠。假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老

鼠跑,狗也跟着叫,使用观察者模式描述该过程。

2.我跟妈妈说:“妈妈,我和妹妹在院子里玩。饭做好了叫我们一声。”请用

观察者模式设计一个模拟系统。

3.采用装饰模式为图书馆中的项目(书或音像盘)增加“可借”功能。使用Java

语言设计一个模拟系统。

4.自定义JButton。开发人员设计用户接口时,通常需要更多有特色的控件,

Decorator模式就提供了一个方法去创造或修改现有的UI控件。使用装饰模式实现一个带有对角线的按钮。

三、实验步骤与要求

1.对于以上题目要认真分析和理解题意,在观察者模式和装饰模式题目中各选1个进行编程,程序中要求使用相应的模式。

2.上机录入,使用JDK编译器调试、运行、验证程序。

3.请指导教师审查程序和运行结果并评定成绩;

4.撰写并上交实验报告。

四、实验原理:

在许多设计中,经常涉及到多个对象都对一个特殊对象中的数据变化感兴趣,而且这多个对象都希望跟踪那个特殊对象中的数据变化,此时可以采用观察者模式。观察者模式意图:“定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。”

观察者模式的UML类图:

装饰模式是动态地扩展一个对象的功能,而不需要改变原始类代码的一种成熟模式。装饰模式意图:“动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。”

装饰模式的UML类图:

五、上机报告内容

1、班级、学号、姓名、实验完成日期;

2、实验题目;

3、设计方案:给出你的设计方案,包括结构类图及相关说明;

4、源代码:设计方案中各个类和接口的源代码,包括测试主类的源代码.

5、测试数据及运行结果

6、总结:

1)运用设计模式总结:对所运用的设计模式的名称,分类,意图,结构,角色作用的总结,所运用的面向对象设计原则。

2)选择一个题目进行说明:如果不使用观察者模式和装饰模式,你能想到其他方法解决问题吗,简要描述你的方案,并和采用命令模式的方案

做简单比较。

3)本次实验遇到的问题、如何解决的;本次实验的经验、体会、改进设想等。

六、实验成绩考核方法

实验成绩由出勤、实验完成情况以及实验报告综合评定。考核成绩比例分配:出勤占15%、实验完成情况占50%、实验报告占35%

七、上机安排

本实验共需2个学时。

观察者模式

Subject.java

public interface Subject {

public void addObserver(Observer o);

public void deleteObserver(Observer o);

public void notifyObservers();

}

Observer.java

public interface Observer {

public void SayHi(String heardMess);

}

Mouse.java

public class Mouse implements Observer{

public Subject subject;

public Mouse(Subject subject){

this.subject = subject;

subject.addObserver(this);

}

public void SayHi(String heardMess) {

System.out.println("我是观察者——老鼠,吱吱吱,我跑了!=。=");

}

}

Dog.java

public class Dog implements Observer {

public Subject subject;

public Dog(Subject subject) {

this.subject = subject;

subject.addObserver(this);

}

public void SayHi(String heardMess) {

System.out.println("我是观察者——狗,犬吠~");

}

}

Cat.java

import java.util.ArrayList;

public class Cat implements Subject {

String mess;

boolean changed;

ArrayList animalsList;

public Cat() {

animalsList = new ArrayList();

mess = "Hi";

changed = false;

}

public void addObserver(Observer o) {

if (!(animalsList.contains(o))) {

animalsList.add(o);

}

}

@Override

public void deleteObserver(Observer o) {

if (animalsList.contains(o)) {

animalsList.remove(o);

}

}

@Override

public void notifyObservers() {

for (int i = 0; i < animalsList.size(); i++) {

Observer observer = animalsList.get(i);

observer.SayHi(mess);

}

}

}

Application.java

public class Application {

public static void main(String args[]){

Cat newcat = new Cat();

@SuppressWarnings("unused")

Dog newdog = new Dog(newcat);

String str = "我是猫,喵喵喵~";

System.out.println(str);

@SuppressWarnings("unused")

Mouse newmouse = new Mouse(newcat);

相关文档
最新文档