java 设计模式_行为型_14策略模式

发布于:2025-06-15 ⋅ 阅读:(15) ⋅ 点赞:(0)

14.策略模式

策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。
策略模式把这些算法,都抽取出来,组成一个一个的类,可以任意的替换,大大降低了代码的耦合度。
实现原理:将相同行为抽成一个接口(行为接口),定义方法,将具体实现定义实现类(算法类),在调用算法的方法中,用行为接口作为参数,调用方法.在实参传具体接口实现类(算法类),从而不同实现类,实现不同效果.
优点

  • 算法多样性,且具备自由切换功能;
  • 有效避免多重条件判断,增强了封装性,简化了操作,降低出错概率;
  • 扩展性良好,策略类遵顼里氏替换原则,可以很方便地进行策略扩展;

缺点

  • 策略类数量增多,且所有策略类都必须对外暴露,以便客户端能进行选择;
    使用场景
  • 针对同一类型问题,有多种处理方式,每一种都能独立解决问题;
  • 算法需要自由切换的场景;
  • 需要屏蔽算法规则的场景;
    1、策略接口
public interface IStrategy {
   /**
    *现在的运行状态
    */
   void sportStatus();
}

2、若干策略实现类
红灯:

public class RedLight implements IStrategy {
   @Override
   public void sportStatus() {
       System.out.println("红灯停");
   }
}

黄灯:

public class YellowLight implements IStrategy {
   @Override
   public void sportStatus() {
       System.out.println("黄灯等待");
   }
}

绿灯:

public class GreenLight implements IStrategy {
   @Override
   public void sportStatus() {
       System.out.println("绿灯行");
   }
}

3、策略上下文对象

@AllArgsConstructor
@NoArgsConstructor
@Data
public class StrategyContext {
   private IStrategy iStrategy;


   public void contextMethod(){
       iStrategy.sportStatus();
   }

}

4、测试类

public class StrategyTest {
   public static void main(String[] args) {
       IStrategy yellowLight = new YellowLight();
       StrategyContext strategyContext = new StrategyContext(yellowLight);
       strategyContext.contextMethod();
   }
}

网站公告

今日签到

点亮在社区的每一天
去签到