点击上方亿元程序员+关注和★星标

引言
你可能知道的设计模式-访问者模式
大家好 ,今天我们要来聊一聊 在游戏开发中非常实用 的设计模式------访问者模式 。访问者模式是一种将算法与对象结构分离 的软件设计模式,它可以让代码更加灵活、可扩展 ,同时也提高了代码的可读性和可维护性 。有什么用?让以后的你或者别人 看了你现在的代码不头疼 。那么,访问者模式在游戏开发中是如何应用 的呢?接下来就让我们一起探讨一下。
本文源码和源工程在文末获取,小伙伴们自行前往。
什么是访问者模式?

访问者模式 (Visitor Pattern)是一种将算法与对象结构分离 的软件设计模式。在这种模式中,我们创建一个表示对象 的接口,让具体的类 实现这个接口,然后定义一个访问具体对象的访问者 类,让它能够调用实现接口的具体类中的方法。这样,当需要修改算法时,只需要 修改访问者类,而不需要修改具体类的结构。
访问者模式的优点

访问者模式有以下几个优点:
- 封装了对象的操作和算法 ,使得它们可以独立于使用它的客户而变化。
- 增加了新的操作 很容易,因为新的定义可以被添加到现有的类中,而不需要修改这些类。
- 降低了 系统的耦合度,使得系统更具有可扩展性。
- 符合 面向对象设计原则,将算法与对象结构分离 ,提高代码的可读性和可维护性。
访问者模式在游戏开发中的应用

在游戏开发中,访问者模式可以应用于以下几个方面:
- AI行为系统 :游戏中的角色通常有很多行为,如移动、攻击、防御等。我们可以将这些行为封装成不同的类,然后通过访问者模式来组合这些行为,实现角色的AI行为。
- 游戏事件处理 :游戏中的事件处理通常涉及到多个对象之间的交互。通过访问者模式,我们可以将事件处理的逻辑封装在一个访问者类中,从而简化事件处理的代码。
- 游戏资源管理 :游戏中的资源管理通常涉及到多个对象的加载、卸载 等操作。通过访问者模式,我们可以将资源管理的逻辑封装在一个访问者类中,从而简化资源管理的代码。
一起来使用访问者模式
下面是一个简单的访问者模式实现示例:
1.游戏对象
首先 创建一个游戏对象类GameObject
,它是不同游戏对象的基类,其中必须实现接受访问的方法accept
,定义了动画组件,组件是FrameAnim
序列帧动画组件,用于管理和播放 角色的序列帧动画 ,大家可以通过文章《CocosCreator帧动画组件FrameAnim实现与使用》学习。

2.具体游戏对象
然后 我们实现两个具体的游戏对象,都实现访问者接口accept
。在被访问者访问的时候进行攻击。

3.访问者
最后定义一下访问者接口,并且实现一个具体的访问者,去访问我们的游戏对象。

4.测试代码
首先我们又双叒叕 创建2个游戏对象ConcreteGameObjectA
和ConcreteGameObjectB
,一左一右,添加"皮肤"。

然后分别给2个游戏对象添加一下点击事件 ,并且创建一个具体的访问者ConcreteVisitor
,通过点击对应的游戏对象去访问他们。

5.结果演示
当我们分别点击不同的游戏对象时,对象会进行皮肤
的加载并且进行攻击。

在这个示例中,我们将游戏对象的访问算法(ConcreteVisitor
类中的方法)与不同类型的游戏对象(ConcreteGameObjectA
和ConcreteGameObjectB
)分离开来。这使得我们能够轻松地为游戏对象和访问算法添加新操作 ,而不需要修改游戏对象的代码,保持了代码的可维护性和可扩展性。这正是访问者模式的强大之处。
结语
在哪里 可以看到如此清晰的思路,快跟上我的节奏!关注我 ,和我一起了解 游戏行业最新动态,学习游戏开发技巧。
本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。
我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。
AD:笔者线上的小游戏《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》大家可以自行点击搜索体验。
实不相瞒,想要个赞 和在看 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!
推荐专栏:
关注我,发送"访问者模式"获取源码和源工程。
点击下方绿色按钮+关注