策略模式(Strategy Pattern)通常用于在运行时根据需要更改算法、策略或行为。它允许您将算法从主程序中解耦,并将其放在单独的类中,以便可以轻松地替换或添加新算法,而不会影响到原有代码。
举一个场景:假设我们需要实现一个游戏,该游戏中有不同的角色/人物,每个角色/人物都有自己的攻击方式。我们需要一种方式来处理这些不同的攻击方式,而不必编写大量的if-else语句或switch-case语句。
在这种情况下,策略模式可以帮助我们通过将每个攻击方式封装在单独的类中来解决这个问题,并使客户端能够动态地选择和更改角色的攻击方式。
下面是JAVA的示例代码:
首先,我们需要定义一个攻击方式接口,并为每种攻击方式创建一个类:
interface AttackBehavior {
void attack();
}
class SwordAttack implements AttackBehavior {
public void attack() {
System.out.println("使用剑进行攻击!");
}
}
class ArrowAttack implements AttackBehavior {
public void attack() {
System.out.println("使用箭进行攻击!");
}
}
class MysteryAttack implements AttackBehavior {
public void attack() {
System.out.println("使用神秘技能进行攻击!");
}
}
然后,我们需要定义一个角色类,并在该类中保存单个攻击方式。接下来,我们需要提供一种设置攻击方式的方法以及一个执行攻击的方法:
class Character {
AttackBehavior attackBehavior;
public void setAttackBehavior(AttackBehavior attackBehavior) {
this.attackBehavior = attackBehavior;
}
public void performAttack() {
attackBehavior.attack();
}
}
最后,我们可以创建不同的人物,并在运行时动态更改它们的攻击方式:
public class Demo {
public static void main(String[] args) {
Character knight = new Character();
knight.setAttackBehavior(new SwordAttack());
knight.performAttack(); // 输出:使用剑进行攻击!
Character archer = new Character();
archer.setAttackBehavior(new ArrowAttack());
archer.performAttack(); // 输出:使用箭进行攻击!
Character wizard = new Character();
wizard.setAttackBehavior(new MysteryAttack());
wizard.performAttack(); // 输出:使用神秘技能进行攻击!
}
}