2024.09.11 | cuithink | 1210次围观
定义一系列算法,将每一个算法 封装起来,并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而变化。
在策略模式中可以定义一些独立的类来封装不同的算法,每一个类封装一种具体 的算法,在这里每一个封装算法的类都可以被称为一种策略,为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做算法的声明.而每种算法对应一个具体的策略类。
策略模式的主要角色如下:
抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为。
环境或上下文(Context)类:是使用算法的角色, 持有一个策略类的引 用,最终给客户端调用。
应用场景
1. 需要根据不同的条件选择不同的算法时。例如,计算器程序需要根据用户输入的运算符选择相应的计算方法。
2. 需要在运行时动态地选择算法时。例如,某个系统需要根据用户的配置或环境变量来选择合适的算法。
3. 需要将算法的实现细节与客户端代码分离时。例如,某个系统需要根据不同 的数据来源来解析数据,但是客户端并不关心数据的解析细节。
代码
public interface Strategy { void algorithm(); } public class ConcreteStrategyA implements Strategy { @Override public void algorithm() { System.out.println("执行策略A"); } } public class ConcreteStrategyB implements Strategy { @Override public void algorithm() { System.out.println("执行策略B"); } } //环境类 public class Context { //维持一个对抽象策略类的引用 private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } //调用策略类中的算法 public void algorithm(){ strategy.algorithm(); } } public class Client { public static void main(String[] args) { Strategy strategyA = new ConcreteStrategyA(); Context context = new Context(strategyA); //可以在运行 时指定类型,通过配置文件+反射机制实现 context.algorithm(); } }
粤ICP备16076548号
发表评论