发布于: 2022-11-29最后更新: 2022-11-29字数 766阅读时长 2 分钟

type
Post
status
Published
date
Nov 29, 2022
slug
behavioral-patterns-of-strategy-design-patterns
summary
tags
策略
category
设计模式
icon
password
 

一、策略模式概述及结构

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

二、策略模式实现

 

策略定义

 
 

策略创建

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

策略使用

 
客户端代码一般如何确定使用哪个策略呢?
最常见的是运行时动态确定使用哪种策略,这也是策略模式最典型的应用场景。
运行时动态:指我们事先并不知道会使用哪个策略,而是在程序运行期间,根据配置、用户输入、计算结果等这些不确定因素,动态决定使用哪种策略。
 
 
 
 
 
 
 

Loading...
行为型模式之责任链设计模式

行为型模式之责任链设计模式


行为型模式之模板方法设计模式

行为型模式之模板方法设计模式