单例模式的特点:
(1)单例类只能有一个实例;
(2)单例类必须由自己创建自己唯一的实例;
(3)单例类必须给所有其他对象提供这一唯一的实例;
单例模式又分为饿汉模式与懒汉模式
(1) 最简单的饿汉模式
/** * 饿汉单例模式 * @author 张进 * http://blog.csdn.net/zj_1395201 */ public class EagerSingleton { public static EagerSingleton instance = new EagerSingleton() ; private EagerSingleton(){ } public static EagerSingleton getInstance(){ return instance ; } }
(2)懒汉模式
/** * 懒汉单例模式 * @author 张进 * http://blog.csdn.net/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(); } } }