zoukankan      html  css  js  c++  java
  • 策略模式学习笔记--在写更好的代码路上

    策略模式:将算法封装到类中,针对不同的场景,提供不同的算法。主要成员:Context(算法接收者) Strategy(算法接口) StrategyImpl(算法是实现者)

    优点:灵活切换不同算法,减少If语句的使用

    缺点:策略过多导致策略类膨胀

    举个例子:

    根据条件运算输入参数的加法或者减法

    算法接口

    package strategy;
    
    /**
     * @author ZHONGZHENG664
     * @date 2018/7/15.
     */
    public interface Strategy {
        /**
         * 针对a和b的运算
         * @param a
         * @param b
         * @return
         */
        int doSomething(int a,int b);
    }

    算法使用环境

    package strategy;
    
    /**
     * @author ZHONGZHENG664
     * @date 2018/7/15.
     */
    public class Context {
        private Strategy strategy;
    
        public Context(Strategy strategy) {
            this.strategy = strategy;
        }
    
        public int execute(int a,int b){
            return this.strategy.doSomething(a, b);
        }
    }

    加法算法的实现:

    package strategy;
    
    /**
     * @author ZHONGZHENG664
     * @date 2018/7/15.
     */
    public class AddStrategy implements Strategy {
    
        public int doSomething(int a, int b) {
            return a+b;
        }
    }

    减法算法的实现:

    package strategy;
    
    /**
     * @author ZHONGZHENG664
     * @date 2018/7/15.
     */
    public class SubStrategy implements Strategy {
    
        public int doSomething(int a, int b) {
            return a-b;
        }
    }

    测试实现:

    package strategy;
    
    /**
     * @author ZHONGZHENG664
     * @date 2018/7/15.
     */
    public class Test {
        public static void main(String[] ags){
            System.out.println("hrll");
            Context context=new Context(new SubStrategy());
            System.out.println("10-5="+context.execute(10,5));
            context=new Context(new AddStrategy());
            System.out.println("10+5="+context.execute(10,5));
        }
    }

    总结:

      策略模式是一个比较简单的设计模式,在日常使用时我们也会把比较大的代码块放到一个方法中,然后根据if进行判断调用,已经很类似策略模式了。策略模式需要调用者知道那种“场景”调用何种“策略”,还是有提升空间的,可以考虑结合工厂模式进行。

    基础模式是设计复杂场景的基础!从基础做起,在路上就好!

    学习的时间不一定要特定安排
  • 相关阅读:
    自己奋斗才有用,人要坚持到成功为止
    自己需要的都是靠自己争取,人生只有自己才靠得住
    不如意也是要过日子,人是不可能和天斗的
    懂得满足也是好的,人要学会知足才会感到幸福
    不要让自己有后悔的时候,人都是要不负自己的青春年少
    ES6 の 块级作用域
    javascript中this的指向分析
    let & var 的区别
    npm 全局安装环境配置
    visibilitychange => 获取页面的可见性
  • 原文地址:https://www.cnblogs.com/zhongzheng123/p/9312189.html
Copyright © 2011-2022 走看看