zoukankan      html  css  js  c++  java
  • 设计模式之我见系列——策略模式

    一、设计图

    二、Demo代码

    1. Strategy接口

    package com.mc.core;
    
    /**
     * Created by LCF on 2016/1/25.
     * 功能:核心策略的具体实现类。
     * 说明:Java中类不加任何修饰符是默认状态,此情况只允许在同一个包访问,之所以这么设计是为了减少暴露不必要变量的风险。
     * 观点:个人认为对于类或者方法:能不暴露更多的就不暴露更多的。
     */
    interface Strategy {
        /**
         * 包含核心策略的公共接口
         * @param a
         * @param b
         * @return
         */
        int operate(int a, int b);
    }

     说明:此接口包含抽象出来的核心的策略。

    2. AddStrategy和SubStrategy

    package com.mc.core;
    
    /**
     * Created by LCF on 2016/1/25.
     * 功能:加法策略的具体实现类。
     * 说明:Java中类不加任何修饰符是默认状态,此情况只允许在同一个包访问,之所以这么设计是为了减少暴露不必要变量的风险。
     * 观点:个人认为对于类或者方法:能不暴露更多的就不暴露更多的。
     */
    class AddStrategy implements Strategy {
        @Override
        public int operate(int a, int b) {
            return a+b;
        }
    }
    package com.mc.core;
    
    /**
     * Created by LCF on 2016/1/25.
     * 功能:减法策略的具体实现类。
     * 说明:Java中类不加任何修饰符是默认状态,此情况只允许在同一个包访问,之所以这么设计是为了减少暴露不必要变量的风险。
     * 观点:个人认为对于类或者方法:能不暴露更多的就不暴露更多的。
     */
    class SubStrategy implements Strategy {
        @Override
        public int operate(int a, int b) {
            return a - b;
        }
    }

    说明:上述2个类,都是核心策略接口的具体实现类。

    3. Context类

    package com.mc.core;
    
    /**
     * Created by LCF on 2016/1/25.
     * 上下文对象实现类,有承上启下的作用。
     */
    public class Context {
        /**
         * 限制用户调用无参构造方法
         */
        private Context(){}
    
        /**
         * 策略的公共接口类
         */
        private Strategy strategy;
    
        /**
         * 枚举类型限制选择。
         */
        public enum Choice{
            ADD,SUB
        }
    
        /**
         * 构造方法为确定使用哪种策略
         * @param choice 具体策略的映射
         */
        public Context(Choice choice){
            if ("ADD".equals(choice.toString())) {
                strategy=new AddStrategy();
            }else{
                strategy=new SubStrategy();
            }
        }
    
        /**
         * 本质为调用公共接口类的方法。
         * @param a 运算所需第一个参数
         * @param b 运算所需第二个参数
         * @return
         */
        public int operate(int a,int b){
            return strategy.operate(a,b);
        }
    }

    说明:此为承上启下的上下文对象类,1. 此类中要由构造函数确定具体调用那种实现类,2. 还要传入实现策略的具体数据。

    项目开源在:http://git.oschina.net/codingox/DesignPattern-Strategy

  • 相关阅读:
    国内网页登录onedrive
    MySQL查询语法
    python 优矿自动化交易
    Python爬取代理ip
    Python获取中国证券报最新资讯
    python推荐淘宝物美价廉商品
    python PIL比较图片像素
    使用pyinstaller打包Python应用,生成EXE执行文件
    Python可视化----------matplotlib.pylot
    panda库------对数据进行操作---合并,转换,拼接
  • 原文地址:https://www.cnblogs.com/LiuChunfu/p/5157336.html
Copyright © 2011-2022 走看看