我想玩过魔兽世界的人,在分装备的时候,往往团长手黑就不说了,Roll点也各种悲剧啊....
这里以roll点为例子,一个团队里的人,分东西的时候,采取Roll点的方法,谁Roll的点高,谁就可以拿装备。只有团队里的人才能够看到团队里的人ROLL的点数,不在团队里的人就看不到,这是如何实现的呢?就需要用到观察着模式了。比如说,有个门卫把守住一个旅馆,每一个进入旅馆的人,这个门卫就把他列入名单,当旅馆里的人丢骰子的时候,这个门卫就会把所有名单上的人都通知一下“XXXROLL出了多少点”。同理,只要是进入了团队的人,就可以被通知到某某人ROLL出了多少点。
[
java] package watcher;
import
java.util.ArrayList;
import
java.util.List;
public class Dice {
// 存放所有队员的list
public List<BaseTeamer> list = new ArrayList<BaseTeamer>();
// 对于每一个队员,都要发送通知
public void notices(String msg) {
for (int i = 0; i < list.size(); i++) {
BaseTeamer baseTeamer = list.get(i);
baseTeamer.pushMsg(msg);
}
}
// 加入一个队员
public void addListenter(BaseTeamer teamer) {
list.add(teamer);
}
// 丢骰子
public void roll() {
notices("XXX ROLL 了100点");
}
}
package watcher;
import
java.util.ArrayList;
import
java.util.List;
public class Dice {
// 存放所有队员的list
public List<BaseTeamer> list = new ArrayList<BaseTeamer>();
// 对于每一个队员,都要发送通知
public void notices(String msg) {
for (int i = 0; i < list.size(); i++) {
BaseTeamer baseTeamer = list.get(i);
baseTeamer.pushMsg(msg);
}
}
// 加入一个队员
public void addListenter(BaseTeamer teamer) {
list.add(teamer);
}
// 丢骰子
www.atcpu.com public void roll() {
notices("XXX ROLL 了100点");
}
}
[
java] package watcher;
/**
* 所有团队成员父类,当然用接口也是可以的
*/
public class BaseTeamer {
public void pushMsg(String msg) {
System.out.println(msg);
}
}
package watcher;
/**
* 所有团队成员父类,当然用接口也是可以的
*/
public class BaseTeamer {
public void pushMsg(String msg) {
System.out.println(msg);
}
}
[
java] package watcher;
public class Teamer extends BaseTeamer {
}
package watcher;
public class Teamer extends BaseTeamer {
}
测试类:[
java] package test;
import watcher.Dice;
import watcher.Teamer;
public class WatcherTest {
public static void main(String[] args) {
// 创建一个骰子对象,然后给一个队员添加监听事件,然后ROll点,就会收到ROLL点信息
Dice dice = new Dice();
Teamer teamer = new Teamer();
dice.addListenter(teamer);
dice.roll();
}
}
package test;
import watcher.Dice;
import watcher.Teamer;
public class WatcherTest {
public static void main(String[] args) {
// 创建一个骰子对象,然后给一个队员添加监听事件,然后ROll点,就会收到ROLL点信息
Dice dice = new Dice();
Teamer teamer = new Teamer();
dice.addListenter(teamer);
dice.roll();
}
}
测试结果:
XXX ROLL 了100点
总结:观察者模式,主要用于监听事件,当发生了某个动作之后,通知这些
注册了监听的类