📜  设计模式-策略模式(1)

📅  最后修改于: 2023-12-03 14:57:40.133000             🧑  作者: Mango

设计模式-策略模式

什么是策略模式

策略模式(Strategy Pattern)是指定义一组算法,将每个算法封装起来,并且使它们之间可以互换。

策略模式可以使算法的变化独立于使用它的客户端。

适用场景
  • 当需要在不同情况下使用不同算法时;
  • 当需要对算法进行封装,使其独立于客户端;
  • 当算法的变化不影响客户端时;
  • 当使用继承很难满足需求时。
实现方式

策略模式的实现方式有两种:

1. 使用策略模式接口
public interface Strategy {
    public void operate();
}

public class StrategyA implements Strategy {
    @Override
    public void operate() {
        // 算法A的具体实现
    }
}

public class StrategyB implements Strategy {
    @Override
    public void operate() {
        // 算法B的具体实现
    }
}

public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void operate() {
        this.strategy.operate();
    }
}

public class Client {
    public static void main(String[] args) {
        Strategy strategy = new StrategyA();
        Context context = new Context(strategy);
        context.operate();
    }
}

在这种实现方式中,策略模式定义了一个接口(Strategy),每个算法都实现该接口。

Context 类是策略模式的核心类,它能够根据所传递的策略对象的不同而执行不同的算法。

2. 使用 Lambda 表达式
public class Client {
    public static void main(String[] args) {
        Context context = new Context(() -> {
            // 算法A的具体实现
        });
        context.operate();
    }
}

在 Java 8 中,可以使用 Lambda 表达式简洁地实现策略模式。

优缺点
优点
  • 可以根据需要动态地改变算法;
  • 可以避免使用多重条件语句;
  • 可以类库中提供多个算法实现,方便客户端使用;
  • 可以提高算法的复用程度。
缺点
  • 客户端需要知道所有的策略,并选择合适的策略;
  • 增加了系统中的类的数量;
  • 学习和理解策略模式需要花费时间。
总结

策略模式可以通过封装算法、解耦客户端和算法的耦合关系,提高程序的灵活性、可扩展性和可维护性。

它是非常重要的一种设计模式,对于程序员来说是必须要掌握的。