如果你的代码耦合严重,接手的人看了头疼,可能缺少这个


点击上方亿元程序员+关注和★星标
请往下看
引言
大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。
本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。
代码耦合严重?可能没用到观察者模式
今天我想和大家分享一下游戏开发中一个非常重要的设计模式——观察者模式。观察者模式是一种行为设计模式,它允许某个对象(称为主题)在状态发生变化时通知其他对象(称为观察者),从而保持它们之间的同步。在游戏开发中,观察者模式被广泛应用于实现动态交互、事件处理和游戏逻辑更新等方面。
本文源码和源工程在文末获取,小伙伴们自行前往。
什么是观察者模式?
首先,让我们来了解一下观察者模式的基本概念和组成部分。观察者模式包含两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以注册、注销和通知观察者。观察者则是接收主题通知并作出相应操作的类或对象。
在游戏开发中,主题可以是游戏中的任何实体或组件,比如玩家控制的角色、游戏中的敌人、道具等等。当这些主题的状态发生变化时,比如角色移动、敌人受到伤害、道具被使用等等,它们会通知相应的观察者进行相应的操作。
观察者模式的核心在于主题与观察者的解耦。主题不需要知道有哪些观察者,也不关心它们的具体实现。同样地,观察者也不需要知道是哪个主题发生了变化,只需要关注自己感兴趣的事件。这种松耦合的设计使得系统的扩展性和可维护性都得到了提高。
通过例子理解观察者模式
文字太多,补个图
接下来,让我们来看一个实际的游戏开发例子。假设我们正在开发一款游戏,有三个小动物,当我们按下空格键的时候,随机一个小动物进行攻击。
可能你会这么写
首先创建三个小动物,并排站。还是用到了我们手敲的FrameAnim帧动画组件,反复使用,造轮子的感觉真好。
随心所欲,代码和我之间有一个能跑就行
然后通过空格键控制产生一个随机数,使对应的小动物进行攻击。
跑起来
上面没有使用观察者模式,直接让客户端和三只小动物耦合,当需要修改或扩展系统时,可能需要对多个类进行修改。
使用观察者模式
1.主题
首先我们创建一个Subject主题类,拥有一些重要的状态,并在状态发生变化时通知观察者。其中包括主题的状态state和订阅者列表observers。
主题
然后是添加订阅和删除订阅的方法。
添加订阅和删除订阅
还有通知方法和业务逻辑。
通知方法和业务逻辑
2.观察者
创建一个Observer类,对由它们所附加的主题发布的更新做出反应。
观察者
3.测试代码
创建一个主题,同时创建三只小动物并创建对应的观察者,添加到主题的订阅者列表当中。
结构化一点,高大上
通过主题的业务逻辑去控制小动物进行攻击。
一句代码的事情,别啰嗦
4.结果演示
和上面不使用观察者模式的结果是一致的。
兔子蹲,兔子蹲,兔子蹲完狐狸蹲
总结一下,观察者模式是游戏开发中非常常用的一种设计模式,它可以实现主题与观察者的解耦,使得系统更加灵活和可扩展。通过使用观察者模式,我们可以实现动态交互、事件处理和游戏逻辑更新等功能。
希望这篇文章对大家有所启发,谢谢阅读!
结语
在哪里可以看到如此清晰的思路,快跟上我的节奏!关注我,和我一起了解游戏行业最新动态,学习游戏开发技巧。
本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。
我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。
AD:笔者线上的小游戏《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》大家可以自行点击搜索体验。
实不相瞒,想要个赞和在看!请把该文章分享给你觉得有需要的其他小伙伴。谢谢!
推荐专栏:
8年主程手把手打造Cocos独立游戏开发框架
从零开始开发贪吃蛇小游戏到上线系列
游戏开发的技巧、心得、资讯
关注我,发送"观察者模式"获取源码和源工程。
点击下方绿色按钮+关注
到顶部