单例模式,顾名思义,就是只有一个实例的模式,客户端仅能获取这个类得唯一一个实例。
类图:(待补充)
例子代码
例子1 预先实例化的单例模式
public class Singleton {
/**
* 预先实例化好了,也可以使用懒实例化,在构造函数中实例化,不过要注意线程同步的位码头
*/
private static Singleton singleton = new Singleton();
/**
* 私有构造函数
*/
private Singleton() {
}
/**
* 对外接口
* @return
*/
public static Singleton getInstance() {
return singleton;
}
}
例子2 懒实例化的单例模式
/**
* 使用懒加载方式
*/
public class Singleton2 {
private static Singleton2 singleton2 = null;
private Singleton2() {
}
/**
* 缺点是每次都要判断是否为null,而且同步浪费效率
*/
public synchronized static Singleton2 getInstance() {
if (singleton2 == null) {
singleton2 = new Singleton2();
}
return singleton2;
}
}
例子3 双重成例检查的单例模式
/**
* 使用双重成例检查的单例模式
*/
public class Singleton3 {
private static Singleton3 singleton3 = null;
private Singleton3() {
}
/**
* 只会判断一次null,效率高了,但是代码稍微复杂了一点
*/
public static Singleton3 getInstance() {
if (singleton3 == null) {
synchronized (Singleton3.class) {
if (singleton3 == null) {
singleton3 = new Singleton3();
}
}
}
return singleton3;
}
}