策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在策略模式中,有一个中央策略对象,它存储一组算法,并且可以动态地选择要使用的算法。
策略模式的核心思想是封装一组算法,将它们分别封装在各自的实现类中,并且使用一个中央策略对象来管理这些算法。这样,就可以在运行时选择不同的算法,而无需修改已有的算法类。
策略模式的关键是解耦,使得算法与使用它们的客户端之间没有固定的依赖关系。这样,当需要修改算法时,只需要修改策略对象,而无需修改客户端。
策略模式有三个主要组件:
- 策略对象 (Strategy):存储一组算法,并负责选择要使用的算法。
- 算法实现类 (Strategy):实现策略对象中存储的算法。
- 客户端 (Client):使用策略对象中的算法。
定义策略的内容,写了个简单的例子就是计算两个值的策略
public class MyClient {
public int totalCal(int a ,int b,calculateTotal calculateTotal){
return calculateTotal.total(a, b);
}
public static void main(String[] args) {
int a = 10;
int b =20;
MyClient myClient = new MyClient();
int i = myClient.totalCal(a, b, new AddStra());
System.out.println(myClient.totalCal(a, b, new MultStra()));
System.out.println(i);
}
}
策略的实现有如下三种:求和,最大,乘积
public class AddStra implements calculateTotal{
@Override
public int total(int a, int b) {
return a+b;
}
}
public class MaxStra implements calculateTotal{
@Override
public int total(int a, int b) {
return a >=b? a:b;
}
}
public class MultStra implements calculateTotal{
@Override
public int total(int a, int b) {
return a*b;
}
}
最后一个是我列举的使用的方案,
public class MyClient {
public int totalCal(int a ,int b,calculateTotal calculateTotal){
return calculateTotal.total(a, b);
}
public static void main(String[] args) {
int a = 10;
int b =20;
MyClient myClient = new MyClient();
int i = myClient.totalCal(a, b, new AddStra());
System.out.println(myClient.totalCal(a, b, new MultStra()));
System.out.println(i);
}
}
后续的可以通过对策略接口实现不同的策略方式,来达成不同的计算效果。而不需要修改原来代码逻辑。更好的帮助应用解耦,以及扩展