好了大家,下面我们接着介绍我们的面试必问设计模式类型中的第7种:策略模式.
策略模式
1.所谓策略,就是我给你看几个东西,我想做成的效果不同,你给我提供做法或方案(两者共通的),我就通过这个共通的方法解决我”各自的问题”.
2.比如我想加或者减由我决定
3.你只需负责提供给我获取其中的数字的”方法”即可
给已经继承了”实现-算法接口的-类”“的方法里-添加辅助方法(通过继承抽象辅助类),从而让方法(运算方法通过实现算法)和功能(分割通过继承)想结合,为了方便大家阅读,我拆分出来描述:
1.计算”接口”-有返回值的计算方法(传入”字符串-表达式”)
2.有一个抽象类,里面有”辅助”的方法,比如分割.
3.多个算法”类”继承辅助函数,实现接口(加减乘除)
用户调用哪个算法就建哪个算法类即可
代码
//计算接口
interface Caclctor {
int caculate(String exp);
}
//多个具体的算法类,有计算接口的方法,也有辅助的方法.
//减
class Mins extends CaclatorHelp implements Caclctor {
@Override
public int caculate(String exp) {
//继承了辅助,用外面的辅助的方法,辅助类的方法是为了拆分并获取数字
int[] num = splitMeth(exp, "\\-");
return num[0] - num[1];
}
}
//加
class Plus extends CaclatorHelp implements Caclctor {
@Override
public int caculate(String exp) {
//继承了辅助,用外面的辅助的方法
int[] num = splitMeth(exp, "\\+");
return num[0] + num[1];
}
}
//抽象的辅助类,用于拆分,并获取字母.
abstract class CaclatorHelp {
public int[] splitMeth(String exp,String opt) {
String[] num = exp.split(opt);
int[] ints = new int[2];
ints[0] = Integer.parseInt(num[0]);
ints[1] = Integer.parseInt(num[1]);
return ints;
}
}
public class StrategyTest {
public static void main(String[] args) {
System.out.println("--------------------加----------------------");
Caclctor mins = new Mins();//用户创建什么就用什么算法
int result_m = mins.caculate("8-1");
System.out.println(result_m);
System.out.println("--------------------减----------------------");;
Caclctor plus = new Plus();
int result_p = plus.caculate("7+8");
System.out.println(result_p);
}
}
输出结果:
--------------------减----------------------
7
--------------------加----------------------
15
关键点总结
1.所谓策略,就是我给你看几个东西,我想做成的效果不同,你给我提供做法或方案(两者共通的),我就通过这个共通的方法解决我"各自的问题".
2.比如我想加或者减由我决定
3.你只需负责提供给我获取其中的数字的"方法"即可