package Game;
import java.util.ArrayList;
public abstract class Subject {
protected String teamName;//战队名字
protected ArrayList <Observer> players=new ArrayList<Observer>();//定义一个观察者集合用于存储所有观察者的对象
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
//添加队友
public void join(Observer obs) {
System.err.println(obs.getName()+"加入"+this.teamName+"战队!");
players.add(obs);
}
//注销观察者
public void quit(Observer obs) {
System.err.println(obs.getName()+"退出"+this.teamName+"战队!");
players.remove(obs);
}
//声明抽象通知方法
public abstract void Notify(String name);
}
ConcreteSubject.java
package Game;
public class ConcreteSubject extends Subject {
public ConcreteSubject(String teamName) {
System.err.println(teamName+"战队组建成功!");
System.err.println("*******************************");
this.teamName=teamName;
}
//声明求救方法
@Override
public void Notify(String name) {
// TODO Auto-generated method stub
System.err.println(this.teamName+"战队消息:队友"+name+"正在求救!");
for(Object obs:players) {
if(!((Observer)obs).getName().equalsIgnoreCase(name)) {
((Observer)obs).help();
}
}
}
}
Observer.java
package Game;
public interface Observer {
public String getName();
public void setName(String name);
public void help(); //声明支援方法
public void beAttacked(Subject sub); //声明遭受攻击方法
}
Player.java
package Game;
public class Player implements Observer {
private String name;
public Player(String name) {
this.name=name;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return this.name;
}
@Override
public void setName(String name) {
// TODO Auto-generated method stub
this.name=name;
}
@Override
public void help() {
// TODO Auto-generated method stub
System.err.println(this.name+"正在路上");
}
@Override
public void beAttacked(Subject sub) {
// TODO Auto-generated method stub
System.err.println(this.name+"正在求救!");
sub.Notify(name);
}
}