• 利用枚举管理事务逻辑


    一个利用枚举进行管理用户逻辑的例子,这里一共定义了两个逻辑,并且提供了一个根据逻辑名返回对象的静态函数:

    package Utility.ext.testconnect;
    
    public enum BizRules {
        PIP_YA(
                "[RULE] PIP_YA: from 1 Jan to 20 Mar, return this year otherwise return next year"),
    
        BILL_B4_OCT(
                "[RULE] BILL_B4_OCT: from Jan to Sep return this year's bill value, from Oct to Dec return sum of this year & next year's bill value");
    
        // desc is used for easy debug
        private String desc;
    
        private BizRules(String desc) {
            this.desc = desc;
        }
    
        @Override
        public String toString() {
            return getDesc();
        }
    
        // find rule by rule name
        public static BizRules findRule(String rule) {
            for (BizRules biz : BizRules.values()) {
                if (biz.name().equalsIgnoreCase(rule)) {
                    return biz;
                }
            }
            return null;
        }
    
        public String getDesc() {
            return desc;
        }
    }

    下面的代码提供了对各种逻辑名的具体实现:

    package Utility.ext.testconnect;
    
    import java.util.Calendar;
    
    public class BizRuleBean {
    
        private int option;
        private String desc;
    
        public BizRuleBean(String rule) {
            this.option = runRule(rule);
        }
    
        private int runRule(String rule) {
            BizRules biz = BizRules.findRule(rule);
            if (biz == null) {
                return -1;
            }
    
            desc = biz.getDesc();
    
            switch (biz) {
            case PIP_YA:
                return pipYA();
            case BILL_B4_OCT:
                return billB4OCT();
            }
            return -1;
        }
    
        // see desc of BizRules.PIP_YA
        private int pipYA() {
            Calendar cal = Calendar.getInstance();
            int month = cal.get(Calendar.MONTH) + 1;
            int day = cal.get(Calendar.DATE);
            if (month > 3) {
                return 1;
            } else if (month == 3) {
                if (day > 20) {
                    return 1;
                } else {
                    return 0;
                }
            } else {
                return 0;
            }
        }
    
        // see desc of BizRules.BILL_B4_OCT
        private int billB4OCT() {
            Calendar cal = Calendar.getInstance();
            int month = cal.get(Calendar.MONTH) + 1;
            if (month < 10) {
                return 0;
            } else {
                return 1;
            }
        }
    
        public int getOption() {
            return option;
        }
    
        public String getDesc() {
            return desc;
        }
    }
  • 相关阅读:
    windows下重新安装pip
    让 Windows 中的 Vim 支持 Python
    【anaconda】处理 WARNING: Ignoring invalid distribution ip
    vim界面语言改为英语
    在windows下vim安装pythonmod插件
    Mac启动,停止重启Mysql命令
    树的问题(二)
    显示数字二进制数
    vector<vector<int>>初始化
    ios作品-东风标致408
  • 原文地址:https://www.cnblogs.com/ryansunyu/p/4313154.html
Copyright © 2020-2023  润新知