1.概念

1.1 什么是策略模式

1.2 优点与缺点

优点:
1.灵活性:策略模式提供了在运行时选择算法或行为的能力,使得算法或行为的变化独立于使用它们的客户。
2.扩展性:通过添加新的策略类,可以很容易地扩展系统的行为,符合开闭原则。
3.简化了代码:策略模式将算法封装在单独的类中,从而简化了上下文类,使得功能划分更加清晰。
4.避免使用多重条件选择语句:策略模式可以帮助避免复杂的条件语句,如多重if-else或switch语句,使代码更加优雅。
5.可维护性:由于算法被封装在不同的类中,因此代码更容易维护和理解。

缺点:
1.增加了系统的复杂性:策略模式引入了更多的类,这可能会增加系统的复杂性,尤其是在策略数量较多时。
2.客户端必须知道不同的策略:客户端必须知道可用的策略,并决定使用哪一个,这可能会导致客户端代码的复杂性增加。
3.策略之间的依赖性:如果策略之间有依赖关系,可能会导致系统变得更加复杂。
4.性能问题:如果策略对象的创建和销毁开销较大,可能会对性能产生影响,尤其是在频繁切换策略的情况下。
5.管理策略类:随着策略数量的增加,管理这些策略类可能会变得困难,尤其是在大型系统中。

2.实现方式

① 定义策略接口

public interface Strategy {
    void execute();
}

②创建实现了这个接口的具体策略类

public class ConcreteStrategyA implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing Strategy A");
    }
}

public class ConcreteStrategyB implements Strategy {
    @Override
    public void execute() {
        System.out.println("Executing Strategy B");
    }
}

③ 创建一个上下文类,它持有一个策略对象的引用,并通过这个引用调用执行方法

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.execute();
    }
}

④ 在客户端代码中使用上下文类和不同的策略

public class Client {
    public static void main(String[] args) {
        Context context = new Context(new ConcreteStrategyA());
        context.executeStrategy(); // 输出: Executing Strategy A

        context.setStrategy(new ConcreteStrategyB());
        context.executeStrategy(); // 输出: Executing Strategy B
    }
}

3. Java 哪些地方用到了策略模式

4. Spring 哪些地方用到了策略模式

06-07 22:43