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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值