"策略模式"-之Java,Android面试必问设计模式(7/9)

来源:互联网 发布:汽车pp2000软件下载 编辑:程序博客网 时间:2024/06/05 03:27

好了大家,下面我们接着介绍我们的面试必问设计模式类型中的第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.你只需负责提供给我获取其中的数字的"方法"即可
0 0
原创粉丝点击