java设计模式之二:观察者模式
3587 点击·0 回帖
![]() | ![]() | |
![]() | 我想玩过魔兽世界的人,在分装备的时候,往往团长手黑就不说了,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点 总结:观察者模式,主要用于监听事件,当发生了某个动作之后,通知这些注册了监听的类 | |
![]() | ![]() |