商务网站建设联系方式,百度信誉任何在网站展示,晋江网站制作,html5网页模板代码设计模式 22#xff1a;策略模式
定义与目的
定义#xff1a;策略模式定义了一系列算法#xff0c;并将每一个算法封装起来#xff0c;使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。目的#xff1a;该模式的主要目的是将一组相关的算法封装成一系列可…设计模式 22策略模式
定义与目的
定义策略模式定义了一系列算法并将每一个算法封装起来使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。目的该模式的主要目的是将一组相关的算法封装成一系列可互换的类并使它们可以相互替换。这样算法可以独立于使用它的客户而变化。
实现示例
假设我们有一个简单的游戏玩家可以选择不同的战斗策略来攻击敌人。我们可以使用策略模式来实现这个需求。
// 抽象策略
interface BattleStrategy {void attack();
}// 具体策略 - 近战攻击
class MeleeAttack implements BattleStrategy {Overridepublic void attack() {System.out.println(Swinging sword!);}
}// 具体策略 - 远程攻击
class RangedAttack implements BattleStrategy {Overridepublic void attack() {System.out.println(Shooting arrow!);}
}// 具体策略 - 魔法攻击
class MagicAttack implements BattleStrategy {Overridepublic void attack() {System.out.println(Casting fireball!);}
}// 上下文 - 玩家
class Player {private BattleStrategy strategy;public Player(BattleStrategy strategy) {this.strategy strategy;}public void setStrategy(BattleStrategy strategy) {this.strategy strategy;}public void doBattle() {System.out.println(Player attacks:);strategy.attack();}
}// 客户端代码
public class Client {public static void main(String[] args) {Player player new Player(new MeleeAttack());player.doBattle(); // 输出: Player attacks: Swinging sword!player.setStrategy(new RangedAttack());player.doBattle(); // 输出: Player attacks: Shooting arrow!player.setStrategy(new MagicAttack());player.doBattle(); // 输出: Player attacks: Casting fireball!}
}使用场景
当你需要在运行时选择不同的算法或行为时。当一组相关的行为应该可以动态地互换时。当算法的变化独立于使用它的客户时。
策略模式通过将一组相关的算法封装成一系列可互换的类并使它们可以相互替换使得算法可以独立于使用它的客户而变化。这对于需要在运行时选择不同的算法或行为的场景非常有用。
小结
策略模式是一种常用的行为型模式它可以帮助你将一组相关的算法封装成一系列可互换的类并使它们可以相互替换。这对于需要在运行时选择不同的算法或行为的场景非常有用。