• 设计模式之我见系列——策略模式


    一、设计图

    二、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

  • 相关阅读:
    解决通用串行总线(USB)控制器有感叹号
    开发者需要了解的WebKit
    Win7系统搭建WiFi热点详细攻略
    给Qt生成的exe执行程序添加版本信息
    IIS(IISReset.exe)命令行
    .net开发微信公众平台
    使用ExitProcess()结束本进程、TerminateProcess 结束进程
    Hosts文件路径及修改方法
    本地动态SQL
    Oracle Package
  • 原文地址:https://www.cnblogs.com/LiuChunfu/p/5157336.html
Copyright © 2020-2023  润新知