- 概述
像线程池、缓存、注册表等,有一个对象就够了,使用单例模式能够很好的满足这方面的需求。 - 定义
单例模式确保一个类只有一个实例,并提供一个全局访问点。 - UML
- 实现
/*** 饿汉式单例模式实现* 如果不考虑性能能和资源上的限制可以考虑此模式*/
public class Singleton1 {/*** JVM在加载这个类时,马上创建一个单例*/private static Singleton1 uniqueInstance = new Singleton1();private Singleton1() {System.out.println("Singleton1");}public static Singleton1 getInstance() {return uniqueInstance;}
}
/*** 双重校验锁单例模式实现*/
public class Singleton2 {/*** volatile关键字确保可见性,保证线程安全*/private volatile static Singleton2 uniqueInstance;private Singleton2() {System.out.println("Singleton2");}/*** 首先检查实例,如果不存在则进入同步块* 进入同步块后,再检查一次,如果是null才创建实例** @return Singleton2*/public static Singleton2 getInstance() {if (null == uniqueInstance) {synchronized (Singleton2.class) {if (null == uniqueInstance) {uniqueInstance = new Singleton2();}}}return uniqueInstance;}
}
/*** 测试类-单例模式*/
public class SingletonTest {public static void main(String[] args) {Singleton1.getInstance();Singleton2.getInstance();}
}
运行结果:
参考资料:
《Head First设计模式》