1. 角色体系架构设计
- 定义抽象角色类
abstract class Character {
// 共同属性
protected String name;
protected int health;
protected int level;
// 共同行为
public Character(String name, int health, int level) {
this.name = name;
this.health = health;
this.level = level;
}
public void takeDamage(int damage) {
this.health -= damage;
if (this.health <= 0) {
System.out.println(name + " 已死亡。");
}
}
public abstract void useSkill();
}
- 具体角色类继承抽象角色类
class Warrior extends Character {
// 战士特有的属性
private int strength;
public Warrior(String name, int health, int level, int strength) {
super(name, health, level);
this.strength = strength;
}
@Override
public void useSkill() {
System.out.println(name + " 发动了旋风斩,对周围敌人造成大量伤害。");
}
// 与装备系统交互示例
public void equipWeapon(String weapon) {
System.out.println(name + " 装备了 " + weapon + ",力量提升。");
strength += 10;
}
}
class Mage extends Character {
// 法师特有的属性
private int intelligence;
public Mage(String name, int health, int level, int intelligence) {
super(name, health, level);
this.intelligence = intelligence;
}
@Override
public void useSkill() {
System.out.println(name + " 释放了火球术,对目标造成魔法伤害。");
}
// 与技能系统交互示例
public void learnNewSkill(String skill) {
System.out.println(name + " 学会了新技能 " + skill + ",智力提升。");
intelligence += 5;
}
}
class Assassin extends Character {
// 刺客特有的属性
private int agility;
public Assassin(String name, int health, int level, int agility) {
super(name, health, level);
this.agility = agility;
}
@Override
public void useSkill() {
System.out.println(name + " 施展了暗影突袭,瞬间移动到敌人背后造成暴击伤害。");
}
}
2. 解决抽象类层次结构过深、方法过多问题
- 合理划分抽象层次
- 在设计抽象类时,遵循单一职责原则。例如,将与战斗相关的通用行为放在一个抽象类中,将与角色成长相关的通用行为放在另一个抽象类中,然后让具体角色类多重继承(通过接口实现类似效果)。这样可以避免所有通用行为都堆积在一个抽象类中,减少层次结构过深的问题。
- 方法拆分与复用
- 如果抽象类中的方法过多,可以将一些复杂的方法拆分成多个小的方法。例如,在
Character
类中,如果takeDamage
方法过于复杂,可以拆分成calculateDamage
、reduceHealth
等方法,提高代码的可读性和维护性。同时,对于一些通用的小方法,可以在不同的具体角色类中复用。
- 使用接口进行功能扩展
- 对于一些不是所有角色都具备的特性,可以通过接口来实现。比如,有些角色可能具备飞行能力,就可以定义一个
Flyable
接口,让具备此能力的角色类实现该接口,而不是在抽象类中添加大量与飞行相关的方法,从而避免抽象类变得臃肿。