Debug模式的升级和扩展

Debug模式的升级和扩展

#

本模式是对我的上一篇文章的扩展和升级
JavaEE 中DEBUG模式的设计
扩展为支持多配置形式,原本的模式是把所有的配置都写在一个类里面的方式
当系统足够庞大,或者想要设置多个配置文件的时候,需要多次调用disableDebug()方法,并不方便
这个扩展仍然支持原来对单个配置文件的独立控制,并额外提供了全局控制,全局控制并不会影响独立控制

#

/**
 * 配置debug模式下的数据
 */
public enum DebugConst {

    HostName("host-name"), 
    Password("password-123"), 
    Count(100), 
    IsAdmin(true),

    ;

    private Object value;

    DebugConst(Object value) {
        this.value = value;
    }

    public Integer intValue() {
        return (Integer) value;
    }

    public Byte byteValue() {
        return (Byte) value;
    }

    public Short shortValue() {
        return (Short) value;
    }

    public Long longValue() {
        return (Long) value;
    }

    public Float floatValue() {
        return (Float) value;
    }

    public Double doubleValue() {
        return (Double) value;
    }

    public boolean booleanValue() {
        return (boolean) value;
    }

    public Object objectValue() {
        return value;
    }

    public String stringValue() {
        return (String)value;
    }

}
/**
 * 配置production模式下的数据
 */
public enum Const {

    HostName("host-name"), 
    Password("password-123"), 
    Count(100), 
    IsAdmin(true),

    ;

    private Object value;

    Const(Object value) {
        this.value = value;
    }

    public Integer intValue() {
        return (Integer) value;
    }

    public Byte byteValue() {
        return (Byte) value;
    }

    public Short shortValue() {
        return (Short) value;
    }

    public Long longValue() {
        return (Long) value;
    }

    public Float floatValue() {
        return (Float) value;
    }

    public Double doubleValue() {
        return (Double) value;
    }

    public boolean booleanValue() {
        return (boolean) value;
    }

    public Object objectValue() {
        return value;
    }

    public String stringValue() {
        return (String)value;
    }
}
import debug.Config;
import debug.debug.DebugConst;
import debug.production.Const;

/**
 *  Created by 谭健 2017年8月3日 15:37:02
 *  
 *  配置桥
 *  
 *  配置桥是桥接debug配置和production配置的从控制器
 *  从控制器接受总控制器配置
 *  从控制器也可以自己配置,并且从控制器的配置优先级高于总控制器
 *      也就是说,如果从控制器选择了debug环境,那么总控制器是不是debug都对从控制器没有影响
 */
public class ConstBrige extends Config {

    /**
     * 从控制器的 初始化开关 属性
     * 由该字段来决定,初始化出来的环境是debug环境还是prodution环境
     */
    private static boolean SELF_ON_OFF = initEnvironment();

    /**
     * 从控制器的公开配置集合
     * 
     * 项目的配置从这里配置出去
     */
    public static String HOST_NAME;
    public static String PASSWORD;
    public static int COUNT;
    public static boolean ISADMIN;

    static {

//     如果需要单独开启从控制器,脱离总控制器的控制,调用以下方法即可
//      openDebug();
//      closeDebug();

        /**
         * 静态加载块
         * 通过初始化开关来决定返回给项目的配置是debug环境还是production环境
         */
        if (SELF_ON_OFF) {
            HOST_NAME = Const.HostName.stringValue();
            PASSWORD = Const.Password.stringValue();
            COUNT = Const.Count.intValue();
            ISADMIN = Const.IsAdmin.booleanValue();
        } else {
            HOST_NAME = DebugConst.HostName.stringValue();
            PASSWORD = DebugConst.Password.stringValue();
            COUNT = DebugConst.Count.intValue();
            ISADMIN = DebugConst.IsAdmin.booleanValue();
        }
    }

    /**
     * 开启从控制器的debug模式
     * 
     * 从控制器是最高优先级
     * 如果需要启动该模式,只需要在static块里面调用该方法即可
     * @since 1.6 从Java1.6版本开始支持该模式
     */
    private static void openDebug() {
        SELF_ON_OFF = false;
    }

    /**
     * 关闭从控制器的debug模式
     * 
     * 从控制器是最高优先级
     * 如果需要启动该模式,只需要在static块里面调用该方法即可
     * @since 1.6 从Java1.6版本开始支持该模式
     */
    private static void closeDebug() {
        SELF_ON_OFF = true;
    }

}
/**
 * Created by 谭健 2017年8月2日 14:14:42 
 * 本设计参考于IOS开发IDE的released模式快速切换 
 * 
 * 为了更好的在debug模式和production模式下进行切换 设计此接口
 * 为了让JAVA的也拥有如此方便的功能,设计该模式
 * 为了防止切换错误,减少切换繁琐工作量,提高切换效率
 * 
 * debug模式下的数据都配置在debug包中
 * production模式下的数据都配置在production包中
 * 两者由bridge包中的公开配置桥来配置和向项目提供数据
 * 
 * 该Config让项目能够快速的切换线上线下配置
 * 使用方法开控制,是借鉴了函数式编程设计思想,更能保证安全性
 * 本设计适用于综合配置,如果项目的所有配置都在一个类中,则只需要一个从控制器即可
 * 如果项目的配置细分到不同的配置中,则使用总 - 分控制器
 * 并且每一个配置类对应一个debug类,一个production类,一个桥接类
 * 
 * Tips : 编写完debug类后,只需要复制一份debug类,修改他的值即可。
 */
public class Config {

    // 总控制器静态加载,选择加载模式,可选debug和production
    static {
        openDebug();
    }

    /**
     * debug / 让程序运行在debug模式下 在该模式下,程序的所有运行都遵从debug设定
     * 
     * 本模式属于开发模式
     */
    private static final boolean DEBUG = false;

    /**
     * production / 让程序运行在production模式下 在该模式下,程序的所有运行都遵从production设定
     * 
     * 本模式属于生产模式
     */
    private static final boolean PRODUCTION = true;

    /**
     * 初始化开关 属性
     * 由该字段来决定,初始化出来的环境是debug环境还是prodution环境
     */
    private static boolean ON_OFF;

    /**
     * 初始化总控制器
     * 
     * 总控制器方法由配置桥初始化调用
     * 配置桥是带bridge字样结束的配置类
     * 配置桥的解释详细见ConstBridge
     * @return 返回初始化的环境,是debug环境还是prodution环境
     */
    protected static boolean initEnvironment() {
        if (ON_OFF) {
            return DEBUG;
        } else {
            return PRODUCTION;
        }
    };

    /**
     * 开启总控制器的debug模式
     * 
     * 总控制器不是最高优先级
     * 如果需要启动该模式,只需要在static块里面调用该方法即可
     * @since 1.6 从Java1.6版本开始支持该模式
     */
    private static void openDebug() {
        ON_OFF = true;
    }

    /**
     * 关闭总控制器的debug模式
     * 
     * 总控制器不是最高优先级
     * 如果需要启动该模式,只需要在static块里面调用该方法即可
     * @since 1.6 从Java1.6版本开始支持该模式
     */
    private static void closeDebug() {
        ON_OFF = false;
    }

}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简简单单OnlineZuozuo

感谢哥哥姐姐的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值