• 设计模式-策略模式


    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.测试结果

  • 相关阅读:
    nodejs理解
    jquery练习
    SASS
    css 继承和层叠
    Session cookie
    vue框架里边的ref='xxx' 的用法 在父组件里边操作子组件的变量 有多组单选按钮(遍历生成)每次只能选中一组
    获取不到页面元素的宽度??????
    刷题很重要
    复盘很重要
    jquery里边的ajax请求,如果是发get请求,就不需要写contentType:'application/json;charset=uft-8'。只有post请求才需要写这个属性。
  • 原文地址:https://www.cnblogs.com/ysit/p/9873254.html
Copyright © 2020-2023  润新知