软件设计模式-观察者模式
某在线游戏支持多人联机对战,每个玩家都可以加人某一战队组成联盟,当战队巾某一成员受到敌人攻击时将给所有盟友发送通知,盟友收到通知后将做出响应。使用观发者模式和中介者模式设计并实现该过程。类图:代码:import java.util.ArrayList;public class Pro {public static void main(String[] args) {Observer player1
·
某在线游戏支持多人联机对战,每个玩家都可以加人某一战队组成联盟,当战队巾某一成员受到敌人攻击时将给所有盟友发送通知,盟友收到通知后将做出响应。使用观发者模式和中介者模式设计并实现该过程。
类图:
代码:
import java.util.ArrayList;
public class Pro {
public static void main(String[] args) {
Observer player1, player2, player3, player4;
player1 = new Player("jack");
player2 = new Player("Mick");
player3 = new Player("kity");
player4 = new Player("jim");
Allay allay = new ConcreteAlly("The Best");
allay.join(player1);
allay.join(player2);
allay.join(player3);
player2.beAttacked();
player4.beAttacked();
allay.quit(player1);
player3.beAttacked();
}
}
abstract class Allay {
protected String name;
protected ArrayList<Observer> membersArrayList = new ArrayList<Observer>();
public void join(Observer obs) {
System.out.println(obs.getName() + "加入" + this.name + "联盟");
membersArrayList.add(obs);
obs.setAllay(this);
}
public void quit(Observer obs) {
System.out.println(obs.getName() + "退出" + this.name + "联盟");
membersArrayList.remove(obs);
obs.setAllay(null);
}
public abstract void notifyMembers(String name);
}
class ConcreteAlly extends Allay {
public ConcreteAlly(String name) {
this.name = name;
}
@Override
public void notifyMembers(String name) {
System.out.println(this.name + "联盟中成员" + name + "遭受敌人攻击!");
for (Observer observer : membersArrayList) {
if (!observer.name.equals(name)) // 自己不能帮自己
observer.help(name);
}
}
}
abstract class Observer {
protected String name;
protected Allay allay;
public Allay getAllay() {
return allay;
}
public void setAllay(Allay allay) {
this.allay = allay;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void beAttacked();
public abstract void help(String name);
}
class Player extends Observer {
public Player(String name) {
this.name = name;
}
@Override
public void beAttacked() {
System.out.println(name + "遭受敌人攻击");
if (allay != null) {
allay.notifyMembers(name);
} else {
System.out.println(name + "没有联盟,没人帮你");
}
}
@Override
public void help(String name) {
System.out.println(this.name + "来救" + name);
}
}
运行结果:
更多推荐
所有评论(0)