JavaEE 中DEBUG模式的设计

时间:2021-01-20 03:34:03

JavaEE 中DEBUG模式的设计

通过DEBUG模式我们可以快速的切换线上和线下的环境

public class Final {

// DEBUG模式,该字段必须放在前面,因为都是静态的,所以JVM会按照代码顺序加载
// DEBUG模式的设计依赖此字段,该字段放到后面会报错
private static boolean DEBUG;

// 包访问权限的静态字段
// 把该值访问权限限制在包内,提供给Const使用
static String HOST_NAME;

static int PASSWORD;

// 静态加载块,在类加载的时候就加载数据
static {

// 通过方法来实现控制的编程思想会让你的代码更具健壮性
// 实现封装性的效果也更好
// 代码的易读性和维护性也更好

// 切换DEBUG模式只需要调用disableDebug或者enableDebug方法即可
disableDebug();


// DEBUG控制的实现
if (DEBUG) {
HOST_NAME = "admintest";
PASSWORD = 123456;
} else {
HOST_NAME = "admin";
PASSWORD = 20170720;
}
}

// 开启DEBUG模式
private static void enableDebug() {
DEBUG = true;
}

// 关闭DEBUG模式
private static void disableDebug() {
DEBUG = false;
}

// 私有的构造方法,禁止常量构造器被外部创建
private Final(){}
}
public enum Const {

// 使用枚举作为常量池,来解决Final类不能使用final的问题
// 因为枚举本身就是常量形式
// 而且他是绝对线程安全的
HOST_NAME(Final.HOST_NAME),
PASSWORD(Final.PASSWORD);

private Object value;

// 私有的构造方法,禁止常量池被外部创建
private Const(final Object value) {
this.value = value;
}

// 返回object,
public Object getValue() {
return value;
}

// 返回int,
public int getInt() {
return (int)value;
}

// 返回其它类型
// ...

// enum类型的类会默认继承Enum类
// 而Enum的toString方法会返回构造函数的name参数,所以此处不覆写toString方法
public String getString() {
return value.toString();
}
}
public class Use {

public static void main(String[] args) {

String s = Const.HOST_NAME.getString();

int i = Const.PASSWORD.getInt();

}
}