为什么需要单例?只因为国家的独生子女政策(当然现在可以生2个)
单例是一个很孤独的物种,因为它的类里面做多只有也仅只有它一个。
常见的是懒汉及饿汉模式,
1.懒汉,为什么这么叫,看看英文,原为lazy loading,lazy(懒惰的),laoding(音如同佬),叫懒佬,然后一个佬==一条汉子,为好听,故懒汉。
最基础的懒汉模式:
//单例模式
public class Singleton {
// 私有化构造方法,使得外部不可能有由new产生实例;
private Singleton() {
}
// 懒汉模式
private static Singleton instance = null;
//不加synchronized,线程有问题;
public static Singleton getInstance() {
if (instance == null)
instance = new Singleton();
return instance;
}
}
上面有线程安全的问题,如果多线程情况下,可以得出多个实例。
加入synchronized 改进后:
//单例模式
public classSingleton {//私有化构造方法,使得外部不可能由用new产生实例;
privateSingleton() {
}//懒汉模式
private static Singleton instance = null;\//不加synchronized,线程有问题;
public staticsynchronized Singleton getInstance() {if (instance == null)
instance= newSingleton();returninstance;
}
}
懒,因为用到了才加载。
饿汉,汉就不解释,上面有。为什么叫饿?因为不管你有没使用这个单例,它都会实例化,在内存中,好像一个很饥饿的人,不管什么,先吃了再说。
具体如下:
//饿汉模式
public class Singleton2 {
//私有化构造方法,使得外表不能用new产生一个实例。
private Singleton2(){}
//饿汉模式,不管你有没用这个实例,先实例化。
private static Singleton2 instance =new Singleton2();
public static Singleton2 getInstance(){
return instance;
};
}