策略模式

来源:互联网 发布:oracle数据脱敏处理 编辑:程序博客网 时间:2024/06/07 03:20

策略模式

定义

  • 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换

优点

  • 算法可以自由切换
  • 避免使用多重条件判断
  • 扩展性良好

缺点

  • 策略类会增多
  • 所有策略类都需要对外暴露

注意项

  • 如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题

第一步

  • 方法接口(AllMethod.java)
public interface AllMethod {    public int doSomething(int first,int second);}

第二步

  • 加,减,乘方法(AddMethod.java、SubstractMethod.java、MultiplyMethod.java)
public class AddMethod implements AllMethod {    @Override    public int doSomething(int first, int second) {        return first + second;    }}
public class SubstractMethod implements AllMethod {    @Override    public int doSomething(int first, int second) {        return first - second;    }}
public class MultiplyMethod implements AllMethod {    @Override    public int doSomething(int first, int second) {        return first * second;    }}

第三步

  • 包装策略的类(Method.java)
public class Method {    private AllMethod allMehod;    public AllMethod getAllMehod() {        return allMehod;    }    public void setAllMehod(AllMethod allMehod) {        this.allMehod = allMehod;    }    public int doMethod(int first,int second) {        if (allMehod != null) {            return allMehod.doSomething(first, second);        }        return 0;    }}

第四步

  • 测试Demo(StrategyDemo.java)
public class StrategyDemo {    public static void main(String[] args) {        AddMethod addMethod = new AddMethod();        SubstractMethod substractMethod = new SubstractMethod();        MultiplyMethod multiplyMethod = new MultiplyMethod();        Method method = new Method();        method.setAllMehod(addMethod);        int add = method.doMethod(1, 2);        method.setAllMehod(substractMethod);        int substract = method.doMethod(1, 2);        method.setAllMehod(multiplyMethod);        int multiply = method.doMethod(1, 2);        System.out.println("add:" + add);        System.out.println("substract:" + substract);        System.out.println("multiply:" + multiply);    }}

第五步

  • 收获结果
add:3substract:-1multiply:2
原创粉丝点击