单例模式的特点:
(1)单例类只能有一个实例;
(2)单例类必须由自己创建自己唯一的实例;
(3)单例类必须给所有其他对象提供这一唯一的实例;
单例模式又分为饿汉模式与懒汉模式
(1) 最简单的饿汉模式
/**
* 饿汉单例模式
* @author 张进
* http://blog.youkuaiyun.com/zj_1395201
*/
public class EagerSingleton {
public static EagerSingleton instance = new EagerSingleton() ;
private EagerSingleton(){
}
public static EagerSingleton getInstance(){
return instance ;
}
}
(2)懒汉模式
/**
* 懒汉单例模式
* @author 张进
* http://blog.youkuaiyun.com/zj_1395201
*/
public class LazySingleton {
private static LazySingleton instance = null ;
private LazySingleton(){
}
public static synchronized LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance ;
}
}
测试程序:
public class TestApp {
/**
* @param args
*/
public static void main(String[] args) {
//测试饿汉单例模式
for (int i = 0; i < 50; i++) {
EagerSingleton mEagerSingleton = EagerSingleton.getInstance();
System.out.println(mEagerSingleton);
}
//测试懒汉单例模式
for (int i = 0; i < 3; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < 50; j++) {
System.out.println(LazySingleton.getInstance()+" == "+Thread.currentThread().getName());
}
}
}).start();
}
}
}