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

我想玩过魔兽世界的人,在分装备的时候,往往团长手黑就不说了,Roll点也各种悲剧啊....

这里以roll点为例子,一个团队里的人,分东西的时候,采取Roll点的方法,谁Roll的点高,谁就可以拿装备。只有团队里的人才能够看到团队里的人ROLL的点数,不在团队里的人就看不到,这是如何实现的呢?就需要用到观察着模式了。比如说,有个门卫把守住一个旅馆,每一个进入旅馆的人,这个门卫就把他列入名单,当旅馆里的人丢骰子的时候,这个门卫就会把所有名单上的人都通知一下“XXXROLL出了多少点”。同理,只要是进入了团队的人,就可以被通知到某某人ROLL出了多少点。


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;

/**
 * 所有团队成员父类,当然用接口也是可以的
 */
public class BaseTeamer {

    public void pushMsg(String msg) {
        System.out.println(msg);
    }

}

package watcher;

public class Teamer extends BaseTeamer {

}

测试类:
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点


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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值