聊聊设计模式 — 观察者模式

本文从网络游戏的任务系统出发,探讨了观察者模式在游戏开发中的应用,通过玩家与任务系统之间的交互,展示了如何利用观察者模式优化性能,减少不必要的资源消耗。同时,文章讨论了观察者模式的优点,如降低耦合度,提高灵活性,并提出了可能的改进措施,以应对大量观察者和多级触发可能导致的效率问题。
摘要由CSDN通过智能技术生成

原帖地址:http://blog.csdn.net/roderick2015/article/details/52728053,转载请注明。

  想必玩过网络游戏的读者都知道任务系统,就是有人交给你个任务,然后你去完成这个目标。比如打打怪什么的,像下面这张图所示,是让你去消灭一个叫做隔壁家老王的怪物。
这里写图片描述

  当你达成目标后,系统会提示你任务完成,还会给你点小奖励。那系统是怎么跟踪任务的,它怎么就知道你完成了呢?今天我们就从游戏的角度来了解观察者模式,首先我们需要编写玩家和任务系统两个对象,最后在场景类中进行调用。

玩家类
  玩家就是干三件事:1接受任务,2找到任务怪,3消灭怪物,然后更新notify标志位,好让监听对象知道你的状态。
  啥,隔壁老王长啥样?可能是这个样子吧。

这里写图片描述

public class Player {
   
    private String name = "张三"; //玩家的名字
    //标志位为true时,表示有状态更新,监听者会获取最新状态
    private boolean notify = false;

    /**
     * 接受任务
     */
    public void receiveTask() {
        System.out.println(this.name + "接受任务:危险:隔壁家老王");
        System.out.println("任务进度:0/1 消灭隔壁家老王");
    }

    /**
     * 找啊找啊找怪物
     */
    public void findMonsters() throws InterruptedException {
        Thread.sleep(1000); //找怪物是要时间的
        System.out.println(this.name + "找到隔壁家老王,开始揍它!");
    }

    /**
     * 攻击怪物
     */
    public void attack() {
        System.out.println(this.name + "扇了隔壁家老王两个大耳巴子!");
        System.out.println("隔壁家老王被" + this.name + "揍扁了。");
        //怪物揍完了,修改更新标志位notify
        setNotify(true);
    }

    //setter和getter方法省略
}

任务系统类
  这个类其实是个线程,所以继承了Thread类。它会不停的循环获取玩家notify状态,当为true时,更新任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>