什么是策略模式
策略模式是一种行为性设计模式。无论什么程序,其目的都是解决问题。而为了解决问题,我们又需要编写特定的算法,策略模式便是可以整体对算法进行替换。
例子:
java中也不乏含有策略模式思想的例子,例如函数式接口、lambda表达式
例子:将字符串大小写转换
StringPrintStragegy 策略接口
package BehavioralPattern.StrategyMode;
/**
* 字符串打印策略
*/
public interface StringPrintStragegy {
/**
* 字符串转换
*/
String changeString(String s);
}
ToLowerCaseStragegy 字符串转小写策略
package BehavioralPattern.StrategyMode;
/**
* 字符串转小写
*/
public class ToLowerCaseStragegy implements StringPrintStragegy{
@Override
public String changeString(String s) {
return s.toLowerCase();
}
}
ToUpperCaseStragegy 字符串转大写策略
package BehavioralPattern.StrategyMode;
/**
* 字符串转大写
*/
public class ToUpperCaseStragegy implements StringPrintStragegy{
@Override
public String changeString(String s) {
return s.toUpperCase();
}
}
StringChangeTool 字符串转换工具(使用策略)
package BehavioralPattern.StrategyMode;
/**
* 字符串转换工具
*/
public class StringChangeTool {
private StringPrintStragegy stragegy;
public StringChangeTool(StringPrintStragegy stragegy) {
this.stragegy = stragegy;
}
public String change(String s){
return stragegy.changeString(s);
}
}
Main
package BehavioralPattern.StrategyMode;
/**
* Main
*/
public class Main {
public static void main(String[] args) {
String s = "HelLo WoRld";
//使用策略
StringChangeTool lowerTool = new StringChangeTool(new ToLowerCaseStragegy());
StringChangeTool upperTool = new StringChangeTool(new ToUpperCaseStragegy());
System.out.println(lowerTool.change(s));
System.out.println(upperTool.change(s));
}
}
结果
总结
策略模式的核心思想是在一个计算方法中把容易变化的算法抽出来作为“策略”参数传进去,从而使得新增策略不必修改原有逻辑。策略模式也可以很好的替换代码中的if-else。
区别于模板方法模式:
模板方法模式 -------- 整个过程
策略模式 --------- 过程中某个具体算法