关键思路
- 类继承与多态:通过
Character
基类定义通用属性和方法,Warrior
、Mage
、Archer
子类继承并重写attack
方法实现多态,这样战斗系统可以统一处理不同类型角色的攻击逻辑。
- 工厂模式:使用工厂模式创建角色实例,将角色创建逻辑封装起来,提高代码的可维护性和可扩展性,便于新增角色类型。
- 数据存储与管理:使用数组或更复杂的数据结构存储角色实例,便于统一管理和操作。
优化点
- 减少重复代码:将通用逻辑放在基类,子类只关注自身特有的实现,降低代码冗余。
- 提高可维护性:通过工厂模式和清晰的类层次结构,使代码结构更清晰,易于理解和修改。
- 性能优化:合理选择数据结构存储角色,如使用数组遍历查找角色时,可根据场景复杂度考虑使用哈希表等更高效的数据结构提高查找效率。
代码实现
// 基类Character
class Character {
name: string;
health: number;
constructor(name: string, health: number) {
this.name = name;
this.health = health;
}
attack(): string {
return `${this.name} 进行普通攻击`;
}
}
// 子类Warrior
class Warrior extends Character {
attack(): string {
return `${this.name} 挥舞宝剑进行攻击`;
}
}
// 子类Mage
class Mage extends Character {
attack(): string {
return `${this.name} 释放魔法进行攻击`;
}
}
// 子类Archer
class Archer extends Character {
attack(): string {
return `${this.name} 拉弓射箭进行攻击`;
}
}
// 角色工厂
class CharacterFactory {
createCharacter(type: string, name: string, health: number): Character {
switch (type) {
case 'Warrior':
return new Warrior(name, health);
case 'Mage':
return new Mage(name, health);
case 'Archer':
return new Archer(name, health);
default:
throw new Error('不支持的角色类型');
}
}
}
// 战斗系统
class BattleSystem {
characters: Character[] = [];
factory: CharacterFactory;
constructor() {
this.factory = new CharacterFactory();
}
addCharacter(type: string, name: string, health: number) {
const character = this.factory.createCharacter(type, name, health);
this.characters.push(character);
}
startBattle() {
this.characters.forEach(character => {
console.log(character.attack());
});
}
}
// 使用示例
const battleSystem = new BattleSystem();
battleSystem.addCharacter('Warrior', '战士1', 100);
battleSystem.addCharacter('Mage', '法师1', 80);
battleSystem.addCharacter('Archer', '弓箭手1', 90);
battleSystem.startBattle();