zoukankan      html  css  js  c++  java
  • 策略模式的扩展——策略枚举

        各位,我给大家出个小学的题目:输入3个参数,进行加减法运算,参数中两个是int型的,剩下的一个参数是String型的,只有“+”,“-”两个符号 可以选择,不要考虑什么复杂的校验,我们做的是白箱测试,输入的就是标准的int类型和合规的String类型,各位大侠,想想看,怎么做,简单得很!
        有非常多的实现方式,我今天来说四种,先说第一种,写一个类,然后进行加减法运算,类图也不用画了,太简单了,直接看代码:

    public enum Calculator { 
    //加法运算 
    ADD("+"){ 
    public int exec(int a,int b){ 
    return a+b; 
    } 
    }, 
    //减法运算 
    SUB("-"){ 
    public int exec(int a,int b){ 
    return a - b; 
    } 
    };
    String value = ""; 
    //定义成员值类型 
    private Calculator(String _value){ 
    this.value = _value; 
    } 
    //获得枚举成员的值 
    public String getValue(){ 
    return this.value; 
    } 
    //声明一个抽象函数 
    public abstract int exec(int a,int b); 
    }
    

         先想一想它的名字,为什么叫做策略枚举?枚举没有问题,它就是一个Enum类型,那为什么又叫做策略呢?找找看能不能找到策略的影子在里面,是的,我们定 义了一个抽象的方法exec,然后在每个枚举成员中进行了实现,如果不实现呢?你试试看看,不实现该方法就不能编译,现在是不是清楚了?把原有定义在抽象 策略中的方法移植到枚举中,每个枚举成员就成为一个具体策略。简单吧,总结一下,策略枚举就是这样一个枚举:

    • 它是一个枚举。

    • 它是一个浓缩了的策略模式的枚举。

        当然,各位可能要反思了,我使用内置类也可以实现相同的功能,写一个Context类,然后把抽象策略、具体策略都内置进去,不就可以解决问题了,是的,可以解决,但是扩展性如何?可读性如何?代码是让人读的,然后才是让机器执行,别把顺序搞反了!

    转自:http://www.cnblogs.com/cbf4life/archive/2010/03/17/1688564.html

  • 相关阅读:
    媒体查询
    H5 progress标记
    sqlite数据库常用语句
    C#导出Word文档开源组件DocX
    bat实现监控进程守护程序-保证平台服务的稳定执行
    windows开机自动执行bat脚本启动cmd命令窗口并执行命令,最后自动关闭cmd命令窗
    Python实现定时执行任务的三种方式简单示例
    bat实现守护程序保证平台正常运行
    Windows CMD命令大全
    Windows下使用批处理文件.bat删除旧文件
  • 原文地址:https://www.cnblogs.com/myphoebe/p/2244803.html
Copyright © 2011-2022 走看看