当前位置: 首页 > news >正文

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

续接上篇,我们介绍了:

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

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

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

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

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!

http://www.jsqmd.com/news/88800/

相关文章:

  • 【Python】conda更换国内镜像源
  • 父子进程关系与终止机制详解
  • 2025年起名改名机构推荐:权威榜TOP5机构深度解析 - 十大品牌推荐
  • 2025年生辰八字起名机构推荐:权威榜TOP5机构深度解析 - 十大品牌推荐
  • Product Hunt 每日热榜 | 2025-12-14
  • 2025年生辰八字起名机构推荐:权威TOP5机构深度解析 - 十大品牌推荐
  • SpringCould —— 网关详解
  • 实验实验实验
  • WinForm DataGridView:单元格类型与高频绘制案例
  • 2025年生辰八字起名机构推荐:榜TOP5机构深度解析 - 十大品牌推荐
  • 2025年八字起名机构推荐:权威榜TOP5机构深度解析 - 十大品牌推荐
  • 基于改进YOLO13-C3k2-WDBB的石棉类型识别与检测系统详解
  • 2025年八字起名机构推荐:权威榜单TOP10机构深度解析 - 十大品牌推荐
  • 存储引擎内核:深入解析 LSM-Tree 原理与高吞吐写入实践
  • 告别逐张修图!AI批量换模特图背景,新手也能统一风格
  • 30、进程间通信:文件锁、共享内存与信号机制
  • 用带头节点的链式存储实现栈的操作
  • Claude vs ChatGPT vs Gemini:全方位对比与选用指南
  • 2025年女孩起名机构推荐:权威起名机构榜TOP5深度解析 - 十大品牌推荐
  • 31、进程间通信:信号、管道与套接字详解
  • 第二十九周 学习周报
  • 在 IntelliJ IDEA 中高效使用 Git 的实用指南
  • 2025年女孩起名机构推荐:权威起名机构榜单深度解析与选择指南 - 十大品牌推荐
  • LeetCode 2147.分隔长廊的方案数:非Hard组合数学
  • nacos集群部署
  • 2025年起名专家推荐:权威榜单TOP5深度解析与选择指南 - 十大品牌推荐
  • java计算机毕业设计社区志愿者服务系统 智慧社区公益志愿协同平台 基层志愿者数字化运营管理系统
  • 物联网通信之CAN通讯
  • 2025年女孩起名机构推荐:权威榜单TOP5机构深度解析 - 十大品牌推荐
  • Highcharts 扩展开发 文档说明