C#中存在重复方法时,如何规整数据类声明?
优化角色技能声明的整洁方案
嘿,我完全懂你现在的烦恼——当你要维护一个需要存储大量数据的类时,一不小心就会让它变得臃肿又杂乱,每次加新属性或方法都像在给一个已经塞满东西的抽屉硬塞新物件。针对你角色技能的声明问题,这里有几个能让代码更整洁、更易维护的方案:
1. 构建者模式(Builder Pattern)
这是处理复杂对象配置的经典方案,能把角色的技能配置逻辑从客户端代码中抽离出来,实现链式调用的流畅写法:
public class CharacterBuilder { private readonly Character _character = new Character(); public CharacterBuilder WithOneHandedSkill() { _character.Skills.Add(Skill.OneHanded()); return this; } public CharacterBuilder WithShieldSkill() { _character.Skills.Add(Skill.Shield()); return this; } // 后续新增技能时,只需要在这里添加对应的配置方法即可 public CharacterBuilder WithArcherySkill() { _character.Skills.Add(Skill.Archery()); return this; } public Character Build() { return _character; } } // 客户端使用示例 var character = new CharacterBuilder() .WithOneHandedSkill() .WithShieldSkill() .Build();
优势:代码可读性极强,配置逻辑集中在Builder类中,原Character类无需频繁新增方法,后续扩展技能组合也非常灵活。
2. 静态工厂方法+集合初始化器
如果你的游戏里有固定的职业/技能组合(比如战士、法师等),可以给Character类添加静态工厂方法,封装常用的技能配置:
public class Character { public List<Skill> Skills { get; } = new List<Skill>(); // 可选:添加接受技能集合的构造函数,简化初始化 public Character(IEnumerable<Skill> skills) { Skills.AddRange(skills); } // 封装固定技能组合的静态工厂方法 public static Character CreateWarrior() { return new Character(new List<Skill> { Skill.OneHanded(), Skill.Shield() }); } public static Character CreateMage() { return new Character(new List<Skill> { Skill.FireMagic(), Skill.IceMagic() }); } } // 客户端使用示例 // 方式1:直接用构造函数+集合初始化 var customCharacter = new Character(new List<Skill> { Skill.OneHanded(), Skill.Shield() }); // 方式2:调用预定义的工厂方法 var warrior = Character.CreateWarrior();
优势:固定角色的创建一行代码就能完成,Character类的职责更单一,不用处理零散的技能添加逻辑。
3. 扩展方法(无侵入式扩展)
如果不想修改现有的Character类(比如它是第三方库的类,或者你不想改动原有代码结构),可以用扩展方法来批量添加技能:
public static class CharacterExtensions { public static Character AddWarriorSkills(this Character character) { character.Skills.Add(Skill.OneHanded()); character.Skills.Add(Skill.Shield()); return character; } public static Character AddRangerSkills(this Character character) { character.Skills.Add(Skill.Archery()); character.Skills.Add(Skill.Tracking()); return character; } } // 客户端使用示例 var character = new Character().AddWarriorSkills();
优势:对原有代码零侵入,能快速扩展新的技能组合,适合已有代码的增量优化。
内容的提问来源于stack exchange,提问作者Zarwalski
相关产品推荐
相关产品推荐

