《软件设计模式》课程实验报告-实验12-观察者模式-学号姓名 - 副本

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

//创建战队

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 observers;

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);

}

}

相关文档
最新文档