JAVA笔记 | 快速理解策略模式且使用
发布人:shili8
发布时间:2024-11-16 21:06
阅读次数:0
**JAVA笔记 | 快速理解策略模式且使用**
**什么是策略模式?**
策略模式是一种行为设计模式,它定义了一个算法家族,分别封装在不同的策略类中,使得可以动态地切换这些算法之间。
**为什么需要策略模式?**
在实际开发过程中,我们经常会遇到这样的问题:某个类的行为取决于某些条件,这些条件可能会改变。例如,我们有一个类,用于计算不同类型的折扣价格。但是,如果我们每次都要修改这个类来适应不同的折扣算法,那么就会变得非常麻烦。
**策略模式的优点**
1. **降低了类之间的耦合度**:策略模式使得类之间的依赖关系变少,提高了系统的灵活性和扩展性。
2. **增加了代码的重用率**:策略模式可以将相同类型的算法封装在不同的策略类中,使得这些算法可以被多次使用。
3. **使得系统更容易维护**:当需要修改某个算法时,只需修改相应的策略类即可,不会影响到其他部分的代码。
**策略模式的结构**
1. **Context类**:该类负责调用不同的策略类来执行具体的操作。
2. **Strategy接口**:该接口定义了所有可能被使用的算法的共同方法。
3. **ConcreteStrategy类**:该类实现了Strategy接口,封装了具体的算法。
**示例代码**
java// Strategy接口public interface DiscountStrategy { double calculateDiscount(double price); } // ConcreteStrategy类:满减策略public class FullReductionStrategy implements DiscountStrategy { @Override public double calculateDiscount(double price) { // 满减策略的具体实现 return price *0.8; } } // ConcreteStrategy类:打折策略public class DiscountStrategy implements DiscountStrategy { @Override public double calculateDiscount(double price) { // 打折策略的具体实现 return price *0.9; } } // Context类public class PriceCalculator { private DiscountStrategy strategy; public PriceCalculator(DiscountStrategy strategy) { this.strategy = strategy; } public double calculatePrice(double price) { return strategy.calculateDiscount(price); } public static void main(String[] args) { // 使用满减策略 PriceCalculator calculator1 = new PriceCalculator(new FullReductionStrategy()); System.out.println("满减价格:" + calculator1.calculatePrice(100)); // 使用打折策略 PriceCalculator calculator2 = new PriceCalculator(new DiscountStrategy()); System.out.println("打折价格:" + calculator2.calculatePrice(100)); } }
**总结**
策略模式是一种非常有用的设计模式,它使得我们可以将相同类型的算法封装在不同的策略类中,使得这些算法可以被多次使用。通过使用策略模式,我们可以降低类之间的耦合度,增加代码的重用率,并且使得系统更容易维护。
**参考**
* 《设计模式:可复用面向对象软件的基础》
* 《Java设计模式与实现》