某些功能需要用到单例模式去做,发现很多重复代码,遂封装之
这只是简单示义,错误处理等功能全部删去了(因和项目有关,写在这里只会扰乱思路)
package example.singleton;
public class Utils {
public static void singleton(Singleton st) {
if (!st.isInitialized()) { // 第一次判断是否已经初始化,如果初始化了就不必后续的相对耗时的锁定操作了
synchronized (st.getLocker()) {
if (!st.isInitialized()) { // 在第一次判断和锁定之间,可能已经被初始化了,所以需要再判断一次
st.initialize();
}
}
}
}
}
package example.singleton;
public interface Singleton {
public Object getLocker();
public boolean isInitialized();
public void initialize();
}
package example.singleton;
import java.util.UUID;
public class test {
private static final Object lock = new Object();
private static String uuid;
public static void main(String[] args) {
Utils.singleton(new Singleton() {
@Override
public boolean isInitialized() {
return uuid != null;
}
@Override
public void initialize() {
uuid = UUID.randomUUID().toString().replace("-", "");
}
@Override
public Object getLocker() {
return lock;
}
});
System.out.println(uuid);
}
}