
Java策略模式是常用的Java设计模式,下面我重点详解Java策略模式的角色实现与应用场景@mikechen
Java策略模式定义
Java策略模式是一种行为型设计模式,它定义了算法族(一组算法)并封装起来,使它们之间可以相互替换,让算法的变化独立于使用算法的客户。
Java策略模式角色
Java策略模式中,通常会涉及到以下角色:

- 抽象策略(Strategy)接口或抽象类:定义了算法族的公共接口,包含了算法的抽象方法。
- 具体策略(Concrete Strategy)类:实现了抽象策略接口或继承了抽象策略类,封装了具体的算法。
- 上下文(Context)类:维护了一个策略接口或抽象类的引用,用于存储当前使用的策略对象,并提供了一个方法来执行算法。
Java策略模式实例
以下是策略模式的实现步骤:
1.创建一个策略接口(或抽象类),定义一个公共方法用于执行算法。
public interface Strategy {
public void execute();
}
2.创建具体策略类,实现策略接口(或继承抽象类),并实现算法。
public class ConcreteStrategyA implements Strategy {
@Override
public void execute() {
System.out.println("执行策略A");
}
}
public class ConcreteStrategyB implements Strategy {
@Override
public void execute() {
System.out.println("执行策略B");
}
}
public class ConcreteStrategyC implements Strategy {
@Override
public void execute() {
System.out.println("执行策略C");
}
}
3.创建一个包含策略接口引用的上下文类,用于设置和执行算法。
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy() {
strategy.execute();
}
}
4.在客户端中创建具体策略类的实例,并将其传递给上下文对象,然后通过上下文对象来执行算法。
public class Client {
public static void main(String[] args) {
Context context = new Context(new ConcreteStrategyA());
context.executeStrategy();
context.setStrategy(new ConcreteStrategyB());
context.executeStrategy();
context.setStrategy(new ConcreteStrategyC());
context.executeStrategy();
}
}
输出结果:
执行策略A 执行策略B 执行策略C
Java策略模式应用场景
Java策略模式应用场景如下:
1.当需要在运行时动态地选择算法时,可以使用策略模式
例如:当一个系统需要根据不同的用户输入来执行不同的操作时,就可以使用策略模式。
2.当有多个相关的类仅在算法或行为上有区别时,可以使用策略模式
例如:在一个电商平台中,不同的促销活动,例如:满减、打折、送礼品等,虽然具有不同的算法,但是它们都属于促销活动,可以使用策略模式来封装这些算法。
3.当一个类有多个行为或算法,但是不能都实现时,可以使用策略模式
例如:在一个图像处理应用程序中,可以使用不同的算法来实现图像压缩、图像滤镜等功能,但是这些算法不能全部实现在一个类中。
4.当需要避免使用多重条件语句时,可以使用策略模式
例如:当一个系统需要根据不同的条件来执行不同的操作时,如果使用多重条件语句会导致代码臃肿、可读性差等问题,此时可以使用策略模式来优化代码。
以上就是Java策略模式详解,更多设计模式请查看:Java设计模式:23种设计模式(万字图文全面总结)
mikechen睿哥
10年+一线大厂架构实战经验,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。