设计模式-策略模式

1.一般情况下我们是将一种行为写成一个类方法,比如计算器类中有加、减、乘、除四种计算方式在类中就会写为四种方法,但是当我们提供一个jar包给别人调用的时候,不允许别人修改我们的方法,但是允许扩展方法。

而策略模式则是将每一种算法都写成一个类,然后动态的选择使用哪一个算法,同时也方便其他人进行自定义自己需要的方法。

2.先写一个通用的接口

/**
 * 策略模式接口
 *
 * @author yuans
 * @create 2018-10-29-20:32
 */
public interface Operation {
    public int doOperation(int num1, int num2);
}

3.每一种算法都要实现这个接口

/**
 * 加法
 *
 * @author yuans
 * @create 2018-10-29-20:34
 */
public class OperationAdd implements Operation {

    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}
/**
 * 减法
 *
 * @author yuans
 * @create 2018-10-29-20:36
 */
public class OperationSub implements Operation {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}

4.编写计算方法类

/**
 * 计算类
 *
 * @author yuans
 * @create 2018-10-29-20:36
 */
public class Calculator {
    private Operation operation;

    public Calculator(Operation operation) {
        this.operation = operation;
    }

    public int doOperation(int num1, int num2) {
        return this.operation.doOperation(num1, num2);
    }
}

5.编写测试方法

/**
 * 测试类
 * 遵循开闭原则,只允许扩展功能,不允许修改原有功能
 * @author yuans
 * @create 2018-10-29-20:38
 */
public class StrategyMain {
    public static void main(String[] args) {
        OperationAdd operationAdd = new OperationAdd();
        Calculator calculator = new Calculator(operationAdd);
        int i = calculator.doOperation(1, 2);
        System.out.println(i);
        System.out.println("-----------------------------------");

        OperationSub operationSub = new OperationSub();
        Calculator calculator2 = new Calculator(operationSub);
        int j = calculator2.doOperation(1, 2);
        System.out.println(j);
    }
}

6.测试结果

 

posted @ 2018-10-29 21:03  微凉微  阅读(114)  评论(0编辑  收藏  举报