实验2_软工1302_2013011342_阮翀
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
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);