news 2026/4/21 11:40:46

游戏中的开发模式有哪些?一篇带你了解常用的设计模式!<二>

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
游戏中的开发模式有哪些?一篇带你了解常用的设计模式!<二>

续接上篇,我们介绍了:

单例:全局唯一的核心管理(玩家数据,体力,音效)

工厂:统一创建规则的对象(角色,武器,怪物)

状态:多状态切换的对象(角色/怪物行为)

我们结合了原神每个场景介绍了这几种设计模式,设计模式其实是一种“不脱离业务的抽象概念”,而是贴合具体场景的“解决方案“。

1.观察者模式(行为)-------游戏事件通知

原神的”体力恢复“”角色突破“”活动结束“等事件,需要通知多个模块:

体力恢复事件:通知UI(更新体力数值),任务系统(检测是否完成”消耗体力任务“),推送系统(提醒玩家”体力已满“)。

角色突破事件:通知UI(现实突破成功弹窗),成就系统(检测是否解锁”突破角色“成就),数据系统(更新角色的战力数值)

下面我用代码实现这些场景:

1. 定义观察者接口
创建 StaminaObserver 接口,声明观察者需要实现的方法

2. 创建被观察者
在 StaminaSystem 类中:
维护观察者列表:List<StaminaObserver> observers
提供添加/移除观察者的方法:addObserver() 和 removeObserver()
实现通知机制:notifyObservers() 方法

3. 实现具体观察者
创建具体的观察者类实现 StaminaObserver 接口:
StaminaUI 类:负责UI更新
TaskSystem 类:负责任务检测

4. 建立订阅关系
在 PlayerDataManager 构造函数中:

5. 触发通知
当 StaminaSystem 中的体力值发生变化时,调用 notifyObservers() 方法通知所有注册的观察者

6.创建test类测试:

观察者模式的优势包括:
1. 松耦合设计
降低依赖:主题(StaminaSystem)和观察者(StaminaUI、TaskSystem)之间松耦合
独立变化:可以独立修改主题或观察者,不影响对方
2. 动态订阅机制
运行时绑定:可以在程序运行时动态添加或移除观察者
灵活配置:根据不同需求订阅不同的观察者
3. 符合设计原则
开闭原则:新增观察者类型无需修改现有代码
单一职责原则:每个观察者只关注自己感兴趣的事件
4. 易于扩展和维护
功能扩展:新增通知接收方只需实现StaminaObserver接口
代码复用:观察者可以在不同主题间复用
5. 一致的更新机制
统一通知:所有观察者通过相同的接口接收更新
状态同步:确保所有相关方都能及时获得状态变化信息
这种设计使得系统更加灵活,便于维护和扩展。

2.组件模式(结构)----角色能力的复用

结合原神场景:
原神的角色能力分别有(移动,攻击,元素反应,护盾,回血)这些都是可以复用的:

钟离:有”移动+岩元素攻击+护盾+回血“组件

0命钟离的元素战技和元素爆发都不能血,6命钟离的玉璋护盾受到伤害时,将为当前角色恢复生命值,回复量为伤害的40%,单次回复量不超过当前角色最大生命值的8%。

安柏:有”移动+火元素攻击+滑翔+兔兔伯爵“组件

如果用继承,会导致类爆炸(比如”有护盾的角色“"能滑翔的角色"),组件模式将能力拆分为独立组件,动态挂载到角色上。

下面简单用代码实现一下

1. 定义组件基类
创建抽象的 CharacterComponent 基类,包含所属角色引用和更新方法:

2. 实现具体组件
创建具体的组件类继承 CharacterComponent:
ShieldComponent:实现护盾相关功能
GlideComponent:实现滑翔相关功能
每个组件负责特定的游戏功能逻辑。

3. 修改角色类
在 Character 类中添加组件管理功能:
添加组件列表:List<CharacterComponent> components
添加组件方法:addComponent(CharacterComponent component)
更新组件更新逻辑:在 update() 方法中遍历并更新所有组件

4. 建立组件关系
通过构造函数将角色实例传递给组件,并在角色中挂载相应组件:

5. 统一更新机制
在角色的 update() 方法中统一更新状态和组件,实现组件化的游戏对象管理。

1. 灵活性和可扩展性
动态组合:可以在运行时动态为 Character 对象添加或移除功能组件
易于扩展:新增功能只需创建新的 CharacterComponent 子类,无需修改现有代码
2. 代码复用性
功能共享:相同组件可在不同角色间复用(如多个角色都可使用 GlideComponent)
职责分离:每个组件专注于单一功能,提高代码内聚性
3. 降低耦合度
松耦合设计:Character 类与具体功能实现解耦
独立开发:不同组件可以独立开发和测试
4. 符合设计原则
开闭原则:对扩展开放,对修改关闭
单一职责原则:每个组件只负责一个特定功能
5. 易于维护
模块化管理:功能逻辑分散在独立的组件中
调试便利:可以单独测试和调试特定组件
相比传统的继承方式,组件模式提供了更灵活和可维护的架构设计。

ok,如果各位观众老爷觉得我讲的还不错,请给我留下一个小小的赞吧!🌂Q!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 5:38:07

SpringCould —— 网关详解

一、前言在讲网关之前&#xff0c;我们需要先自行拆分黑马商城的其他模块&#xff0c;比如用户微服务、交易微服务、支付微服务。然后就会发现一个问题&#xff0c;我们在前面的确是可以使用不同端口号对各个微服务进行单一访问的&#xff0c;并且可以用测试文档去测试&#xf…

作者头像 李华
网站建设 2026/4/16 1:39:18

WebLLM硬件加速终极指南:从零解决WebGPU兼容性问题

WebLLM硬件加速终极指南&#xff1a;从零解决WebGPU兼容性问题 【免费下载链接】web-llm 将大型语言模型和聊天功能引入网络浏览器。所有内容都在浏览器内部运行&#xff0c;无需服务器支持。 项目地址: https://gitcode.com/GitHub_Trending/we/web-llm 你是否曾经满怀…

作者头像 李华
网站建设 2026/4/16 13:30:27

如何优雅的应对屎山代码[特殊字符]

你眼中的 “烂代码”&#xff0c;或许曾支撑过公司的核心业务&#xff0c;甚至藏着你不知道的 “隐形坑”&#xff0c;就像是《左耳》里面写的&#xff1a;“前任也曾是爱的人”。 核心&#xff1a;职场不是 “写漂亮代码的乌托邦”&#xff0c;而是 “解决问题的修罗场”。 如…

作者头像 李华
网站建设 2026/4/18 23:05:15

基于Spring Boot+Vue的档案数字化项目管理系统

目录 项目介绍 演示视频 系统展示 代码实现 推荐项目 项目开发总结 为什么选择我 源码获取 博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领…

作者头像 李华
网站建设 2026/4/20 16:30:03

vue基于Spring Boot框架的宠物收养志愿者管理系统的设计与实现_0mp970vp

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/4/20 17:52:26

顶与底判断顶底 通达信指标 源码分享

{}VAR2:LLV(LOW,10); VAR3:HHV(HIGH,25); 我:3.5,COLOR0088FF; 清仓: 3.5,COLORYELLOW,LINETHICK3; 减仓: 3.2,COLORBLUE; 动力线: EMA((CLOSE-VAR2)/(VAR3-VAR2)*4,4); 强弱线:1.75,LINETHICK1,COLORGREEN; 关注:0.5,COLORBLUE ; {} 数值:动力线,COLORA8A8A8; DRAWBAND(减仓,R…

作者头像 李华