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;
}
}