首页 > 程序开发 > 软件开发 > Java >

java设计模式之二:观察者模式

2012-05-11

我想玩过魔兽世界的人,在分装备的时候,往往团长手黑就不说了,Roll点也各种悲剧啊....这里以roll点为例子,一个团队里的人,分东西的时候,采取Roll点的方法,谁Roll的点高,谁就可以拿装备。只有团队里的人才...

我想玩过魔兽世界的人,在分装备的时候,往往团长手黑就不说了,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.2cto.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点

总结:观察者模式,主要用于监听事件,当发生了某个动作之后,通知这些注册了监听的类




摘自 a107494639的专栏

相关文章
最新文章
热点推荐