设计模式我相信大家都知道它是一种解决软件设计中重复出现问题的解决方案,是一套“可复用的设计思路”----它总结了开发者在不同场景下验证过的最佳实践。
当然,干讲设计模式肯定令人砍的头疼,所以我结合原神各种场景为大家一一剖析设计模式的强大。
众所周知原神的核心系统(角色养成,抽卡,体力,商城,活动)其实这些都能对应着典型的设计模式。
那我们直切主题,开始介绍设计模式。
1.单例模式(创建型)------全局唯一的核心系统
结合原神的场景:
玩家数据库管理器(PlayerDataManager): 存储玩家等级,原石,摩拉,已拥有的角色,都是全局唯一的,任何模块(抽卡,商城,任务)都要读写这些数据(多很多实例就会让数据错乱)。
体力系统(StaminaSystem):管理树脂(体力)的恢复,消耗,全局唯一,不管是刷副本,挖矿还是打周本,都要通过这一个实例扣减体力。
以上是单例模式(饿汉式)的模板
实现步骤:
- 把类的构造器私有
- 定义一个类变量记住类的一个对象
- 定义一个类方法,返回对象
下面结合上述的原神场景,我们简单的用单例模式实现一下。
总结:
**1. 保证全局唯一实例
确保整个游戏中只有一个 PlayerDataManager 实例
所有地方访问的都是同一个玩家数据管理器,保证数据一致性
- 线程安全保障
避免多线程环境下可能出现的竞争条件问题- 即时可用性
游戏启动时立即初始化玩家数据- 防止外部实例化
通过私有构造函数 PlayerDataManager() 禁止外部直接创建实例
只能通过 getInstance() 方法获取唯一实例- 数据集中管理
统一管理玩家的核心数据:primogem、mora、ownedCharacters
所有对玩家数据的操作都通过这个单例进行,便于维护和监控**
2.工厂模式(创造型)-----角色/武器的创建
结合原神场景:
原神游不同类型的角色(五星/四星,输出/辅助),武器(单手剑/双手剑/弓),如果直接new会导致创建逻辑分散,用工厂模式统一管理角色/武器的创建规则(比如五星角色的基础属性,技能)
封装角色的基础信息:
分别创建四星和五星子类:
1.FourStarSupportCharacter 专门处理四星辅助角色的特定行为
2.FiveStarDPSCharacter 专门处理五星输出角色的特定行为
3.每个类只需关注自己类型的特殊逻辑
工厂模式的优势:
1.添加新的角色子类不影响现有代码。
2.工厂方法只需增加新的分支即可。
3. 状态模式(行为型)—— 角色 / 怪物的状态管理
原神场景:
- 角色状态:Idle(待机)、Move(移动)、Skill(放技能)、Dash(冲刺)、Dead(倒地);
- 怪物状态:Patrol(巡逻)、Attack(攻击)、Flee(逃跑)、Die(死亡)。用状态模式替代大量 if-else,让状态切换逻辑更清晰。
创建状态接口:
分别创建实现类IdleState()与BattleState():
在 Character( ) 中添加状态管理功能:
在 Test 中测试状态模式:
状态模式的优势:
1.解耦合: 角色行为与状态逻辑分离,每个状态独立管理自己的行为。
2.易扩展: 可轻松添加新状态类型,如 ExploreState、QuestState 等。
3添加新状态无需修改现有代码。
4. 通过 switchState 方法统一管理状态切换逻辑。
这种实现让游戏角色具备更智能的行为模式,可以根据不同情境自动切换状态,提升游戏体验。