zoukankan      html  css  js  c++  java
  • 设计模式-策略模式

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

  • 相关阅读:
    DNS服务器详解
    numpy学习
    test_pandas
    1.爬虫基本介绍
    数据分析介绍及软件使用 01
    3.解析库beautifulsoup
    jQuery UI vs EasyUI
    "file:///" file 协议
    Display:Block
    前端响应式设计中@media等的相关运用
  • 原文地址:https://www.cnblogs.com/ysit/p/9873254.html
Copyright © 2011-2022 走看看