单例设计模式分为:懒汉设计模式和饿汉设计模式。确保某个类只有一个实例,而且自行实例化提供给外部使用。
(1)饿汉式:
public class SingleTon {
public static SingleTon instance = new SingleTon ();
private SingleTon () {
}
public static SingleTon getInstance() {
return instance;
}
}
优点:简单,线程安全。
缺点:实例对象是static的,在声明的时候就实例化了,浪费资源。
(2)懒汉式:
public class SingleTon {
private static SingleTon instance = null;
private SingleTon () {
}
public static synchronized SingleTon getInstance() {
if (instance == null)
instance = new SingleTon ();
return instance;
}
}
优点:用到的时候才会去实例化,在一定程度上节约了资源。
缺点:getInstance方法是用synchronized修饰的,该方法是同步的,为了保证线程安全,但是导致每次调用该方法的时候都会被同步,这样会消耗不必要的资源
(3)双重检查锁定:
public class SingleTon {
private static Singleton instance = null;
private SingleTon () {
}
public static SingleTon getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new SingleTon ();
}
}
}
return instance ;
}
}
优点:第一次执行getInstance方法时才会实例化,资源利用率高,效率高。
缺点:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销,可以通过使用静态初始化解决此问题。
(4)静态内部类实现:
public class SingleTon {
private SingleTon() {
}
public static SingleTon getInstance() {
return SingleTonHandler.singleTonInstance;
}
public static class SingleTonHandler {
private static final SingleTon singleTonInstance = new SingleTon();
}
}
网友评论