• 策略模式学习笔记--在写更好的代码路上


    策略模式:将算法封装到类中,针对不同的场景,提供不同的算法。主要成员: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进行判断调用,已经很类似策略模式了。策略模式需要调用者知道那种“场景”调用何种“策略”,还是有提升空间的,可以考虑结合工厂模式进行。

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

    学习的时间不一定要特定安排
  • 相关阅读:
    mysqld_safe — MySQL Server Startup Script
    运行python出错:-bash: ./test.py: /usr/bin/python^M: bad interpreter: No such file or directory
    php set_error_handler
    linux chattr命令与php的配置文件.user.ini
    php memcache扩展
    GoLang之strings、buffers、bytes、binary包
    Solidity 编程实例--Blind Auction 盲拍
    Solidity 编程实例--简单的公开拍卖
    Solidity 编程实例--投票
    建立自己的数字货币
  • 原文地址:https://www.cnblogs.com/zhongzheng123/p/9312189.html
Copyright © 2020-2023  润新知