策略模式(Strategy Pattern)

  • 策略模式(Strategy Pattern)
    • 策略模式概述
    • 策略模式结构图
      • 策略模式主要包含的角色
    • talk is cheap, show you my code
    • 总结

策略模式(Strategy Pattern)

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法独立于使用它的客户端而变化,从而提高了代码的灵活性和可维护性。

太抽象了
还是举个现实生活中的例子,假如我们现在要设计一个电影院售票系统,我们要给不同的客户提供不同的折扣,比如说:老年人半价,学生票半价,小朋友多少岁之前免票之类的。怎么办?你可能像,我们直接if else不就好了。也许开始的时候是可以实现我们的要求的,但是如果我们现在要增加活动,学生积分抵现,或者看5次免一次票价活动,你想想我们如果要在之前的ifelse里面做改动的话,会导致修改的量很大,而且还非常容易出错。那有没有更好的实现方式呢? 策略模式(Strategy Pattern)

策略模式概述

策略模式结构图

策略模式主要包含的角色

  1. 策略接口(Strategy):定义了所有支持算法公共操作的接口或抽象类。具体策略类必须实现这个接口中的方法。
public interface Strategy {
   
   
    void execute();
}
  1. 具体策略(ConcreteStrategy):实现了 Strategy 接口的具体类。每个具体策略都提供了一种算法的实现方式。
public class ConcreteStrategyA implements Strategy {
   
   
    @Override
    public void execute() {
   
   
        System.out.println("strategy A");
    }
}

public class ConcreteStrategyB implements Strategy {
   
   
    @Override
    public void execute() {
   
   
        System.out.println("strategy B");
    }
}
  1. 上下文(Context):上下文类拥有一个对策略对象的引用,并提供了设置和获取策略的方法。上下文委托给策略对象来执行具体的算法逻辑。
public class Context {