type
status
date
slug
summary
tags
category
icon
password
 

一、策略模式概述及结构

 
策略模式最常见的应用场景是,利用它来避免冗长的 if-else 或 switch 分支判断。不过,它的作用还不止如此,它也可以像模板模式那样,提供框架的扩展点等等。
 
策略模式:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。
 
工厂模式是解耦对象的创建和使用,观察者模式是解耦观察者和被观察者。策略模式跟两者类似,也能起到解耦的作用,不过,它解耦的是策略的定义、创建、使用这三部分
 
策略模式结构:
  • 抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
  • 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为。
  • 环境(Context)类:持有一个策略类的引用,最终给客户端调用。
 

二、策略模式实现

 

策略定义

 
 

策略创建

 
  • 策略模式会包含一组策略,隐藏细节,使用简单工厂 + 单例的结合进行实现
  • 若策略类是无状态的,即使用缓存中的策略实现没问题(这样是可以优化分支判断的)
    • 静态代码块中的缓存会随着策略的增加而改变,因此还可以利用反射 + 注解 方式进行优化,做到工厂类无需进行修改。
  • 若策略类是有状态的,则不能使用缓存起来的策略,需要获取策略时动态创建新的策略(这个仍然需要分支判断,同样也可以通过反射解决)
 

策略使用

 
客户端代码一般如何确定使用哪个策略呢?
最常见的是运行时动态确定使用哪种策略,这也是策略模式最典型的应用场景。
运行时动态:指我们事先并不知道会使用哪个策略,而是在程序运行期间,根据配置、用户输入、计算结果等这些不确定因素,动态决定使用哪种策略。
 
 
 
 
 
 
 
行为型模式之责任链设计模式行为型模式之模板方法设计模式
Loading...
ITNXD
ITNXD
一个普通的干饭人🍚
最新发布
Java 并发编程
2025-7-31
Spring 源码系列第三章 - 后置 Bean 处理器与 Bean 生命周期
2022-12-25
Spring 源码系列第一章 - Spring 核心组件接口
2022-12-11
Spring 源码系列第二章 - 后置工厂处理器与 Bean 生命周期
2022-12-10
行为型模式之迭代器设计模式
2022-12-2
行为型模式之责任链设计模式
2022-12-1