《软件设计模式》课程实验报告-实验12-观察者模式-学号姓名 - 副本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称:
专业班级:
姓名:
学号:
指导老师:
日期:
福州理工学院工学院
二〇一七年三月
实验12 [观察者模式的应用]
一、实验目的
1.理解观察者模式的定义
2.掌握观察者模式的结构类图和典型代码
二、实验准备与环境
1.实验准备
观察者模式类图
2.实验环境
StarUML(或Visio...)+Eclipse
三、实验要求
某在线游戏支持多人联机对战,每个玩家都可以加入某一战队组成联盟,当战队中某一成员受到敌人攻击时将给所有盟友发送通知,盟友收到通知后将作出响应。使用观察者模式设计并实现该过程。绘制类图并编程实现。
四、实验步骤
package com.test.observer;
//观察者接口,由观察者来实现
public interface Observer {
public String getName();
public void setName(String name);
public void help(); //声明支援方法
public void beAttacked(Subject sub);//声明遭受攻击方式
}
package com.test.observer;
public interface Subject {
public void join(Observer o);
public void quit(Observer o);
public void notifyObservers(String name);
}
package com.test.observer;
import java.util.ArrayList;
public class ConcreteSubject implements Subject {
private String teamName;//战队名称
private ArrayList
//创建战队
public ConcreteSubject(String teamName) {
System.out.println(teamName+"战队组建成功!");
System.out.println("======================");
observers=new ArrayList
this.teamName=teamName;
}
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
//添加队友
@Override
public void join(Observer o) {
System.out.println(o.getName()+"加入"+this.teamName+"战队!");
observers.add(o);
}
//注销观察者
@Override
public void quit(Observer o) {
System.out.println(o.getName()+"退出"+this.teamName+"战队!");
observers.remove(o);
}
@Override
public void notifyObservers(String name) {
System.err.println(this.teamName+"战队消息:队友"+name+"正在求救!");
for(Object obs:observers) {
if(!((Observer)obs).getName().equalsIgnoreCase(name)) {
((Observer)obs).help();
}
}
}
}
package com.kuang.observer.improve;
import com.kuang.observer.CurrentConditions;
import java.util.ArrayList;
public class WeatherData implements Subject{
//温度气压湿度
private float temperature;
private float pressure;
private float humidity;
//观察者集合
private ArrayList
public WeatherData() {
observers=new ArrayList
}
public float getTemperature() {
return temperature;
}
public float getPressure() {
return pressure;
}
public float getHumidity() {
return humidity;
}
public void dataChange(){
notifyObservers();
}
//当数据有更新时,就调用setData
public void setData(float temperature, float pressure, float humidity) { this.temperature = temperature;
this.pressure = pressure;
this.humidity = humidity;
dataChange();
}
//注册一个观察者
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
//移除一个观察者
@Override
public void removeObserver(Observer o) {
if(observers.contains(o)){
observers.remove(o);
}
}