做彩票网站要什么接口,建设银行住房公积金卡网站,星链seo管理,中国建设银行培训网站文章目录 策略模式定义英文原话直译 角色类图策略接口Strategy#xff1a;具体策略类上下文类Context测试类 策略模式的应用策略模式的优点策略模式的缺点策略模式的使用场景 策略模式
策略模式#xff08;Strategy Pattern#xff09;
Strategy策略也称作Policy政策。
想… 文章目录 策略模式定义英文原话直译 角色类图策略接口Strategy具体策略类上下文类Context测试类 策略模式的应用策略模式的优点策略模式的缺点策略模式的使用场景 策略模式
策略模式Strategy Pattern
Strategy策略也称作Policy政策。
想象一下我们正在玩一个角色扮演游戏。在游戏中我们的角色有多种技能可以选择比如“火球术”、“冰霜箭”和“治愈术”。每种技能都有不同的效果和用途。现在游戏设计师希望让我们能够随时切换这些技能以适应不同的战斗场景。
策略模式就是这样一种设计思想。它允许我们定义不同的“技能”即策略然后在游戏中根据需要随时切换使用哪种技能。这样我们就可以更加灵活地应对各种战斗情况了。
同样地在计费系统或商城促销活动中策略模式也允许我们根据不同的条件选择不同的计费方式或优惠策略使得系统更加灵活和可配置。
定义
英文原话
Define a family of algorithms, encapsulate each one, and make them interchangeable.
直译
定义一系列的算法把它们一个个封装起来并且是他们可相互替换必然实现了相同的接口不然无法相互替换该接口就是策略接口
本模式使得算法可独立于使用它的客户而变化。
角色
策略接口Strategy定义所有支持的算法的公共接口。具体策略ConcreteStrategy实现策略接口的类具体策略类实现了算法的具体逻辑。上下文Context使用策略接口的类也称为“上下文”或“客户端”。上下文类内部持有一个策略对象的引用并且负责在需要的时候调用策略对象的算法。
类图 在策略模式中我们可以将这三个角色用Java类来具体实现。以下是一个简化的策略模式示例其中包含了Strategy策略接口、ConcreteStrategy具体策略类和Context上下文类的实现。
策略接口Strategy
// Strategy.java
public interface Strategy { void executeStrategy();
}具体策略类
这里假设有两个具体策略类ConcreteStrategyA和ConcreteStrategyB
// ConcreteStrategyA.java
public class ConcreteStrategyA implements Strategy { Override public void executeStrategy() { System.out.println(执行策略A); // 策略A的具体实现 }
} // ConcreteStrategyB.java
public class ConcreteStrategyB implements Strategy { Override public void executeStrategy() { System.out.println(执行策略B); // 策略B的具体实现 }
}上下文类Context
它持有一个策略对象的引用并提供了设置策略和执行策略的方法
// Context.java
public class Context { private Strategy strategy; // 构造函数 public Context(Strategy strategy) { this.strategy strategy; } // 设置策略 public void setStrategy(Strategy strategy) { this.strategy strategy; } // 执行策略 public void executeStrategy() { strategy.executeStrategy(); }
}测试类
现在我们可以编写一个示例来展示如何使用策略模式
// StrategyPatternDemo.java
public class StrategyPatternDemo { public static void main(String[] args) { // 创建策略对象 Strategy strategyA new ConcreteStrategyA(); Strategy strategyB new ConcreteStrategyB(); // 创建上下文对象并设置策略 Context context new Context(strategyA); context.executeStrategy(); // 输出执行策略A // 修改策略 context.setStrategy(strategyB); context.executeStrategy(); // 输出执行策略B }
}/* Output:
执行策略A
执行策略B
*///~在这个示例中Context类可以根据需要改变其内部持有的Strategy对象从而改变其行为。 这是策略模式的核心思想将算法的使用与算法的实现分离开来使得算法可以独立于使用它的客户端变化。 策略模式的应用
策略模式是一种行为型设计模式它定义了一系列的算法并将每一个算法封装起来使它们可以互相替换。在软件系统中策略模式使得算法可以独立于使用它的客户端变化。
策略模式的优点
算法自由切换由于策略类实现了同一个接口因此它们之间可以自由切换这使得系统更加灵活和可维护。易于扩展当需要增加新的算法时只需要实现该接口即可符合开闭原则。避免使用多重条件语句使用策略模式可以避免在代码中出现大量的if-else语句使代码更加清晰、简洁和易于维护。提高算法的保密性和安全性客户端只需要知道它使用了哪些算法而不需要知道这些算法的具体实现细节这有助于保护算法的安全性和保密性。
策略模式的缺点
客户端必须知道所有的策略类客户端需要了解并决定使用哪一个策略类这可能会增加客户端的复杂性。可能造成策略类过多当系统中存在大量的策略时可能会导致策略类过多增加了系统的复杂性。
策略模式的使用场景
计费系统对于不同用户类型和消费金额采用不同的计费方式可以使用策略模式来定义不同的计费策略。游戏开发中的角色技能系统不同角色拥有不同的技能可以根据角色的选择使用不同的技能策略进行攻击或防御。商城促销活动根据不同的促销活动采取不同的优惠方式如打折、满减等策略模式可以方便地管理和切换这些优惠策略。需要动态选择算法的场景当系统中需要根据不同的条件选择不同的算法进行计算时策略模式可以提供一个灵活的解决方案。