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

  • 相关阅读:
    手把手带你画一个 时尚仪表盘 Android 自定义View
    新手自定义view练习实例之(二) 波浪view
    新手自定义view练习实例之(一) 泡泡弹窗
    增加辅助的数据库组件
    解决Plugin is too old,please update to a more recent version,or set ANDROID_DAILY_OVERRIDE..
    Android 自定义View -- 简约的折线图
    android 开源图表库MPChart最简单使用方法示例教程Demo--折线图 柱状图
    改善database schema
    题解报告:hdu 2057 A + B Again
    hdu 2087 剪花布条(KMP入门)
  • 原文地址:https://www.cnblogs.com/LiuChunfu/p/5157336.html
Copyright © 2011-2022 走看看