设计模式-单例模式(Singleton Pattern)解析

设计模式-单例模式(Singleton Pattern)解析

 

1. 单例模式(Singleton Pattern)的定义:

       确保一个类只有一个实例,并提供一个全局访问点。

 

2. 单例模式(Singleton Pattern)的用处:

     有一些对象其实我们只需要一个,例如:线程池(thread pool),缓存(cache),对话框,处理偏好设置和注册表(registry)的对象,日志对象等设备的驱动程序的对象。事实上,这类对象只能有一个实例,如果创建多个实例,就会导致许多问题的产生,比如:程序的行为异常,资源使用过量,或者是不一致的结果。

 

3.单例模式(Singleton Pattern的类图:

设计模式-单例模式(Singleton Pattern)解析

 4.单例模式的实现方式(4种):

(1) 懒汉模式- -(线程不安全)。

设计模式-单例模式(Singleton Pattern)解析

      经典模式声明了一个静态对象,在用户第一次调用时初始化。这虽然节约了资源,但第一次加载时需要实例化,反应稍慢一些,而且在多线程情况下不能正常工作。

 

(2)懒汉模式--(线程安全)。

设计模式-单例模式(Singleton Pattern)解析

      把getInstance( )方法变成同步(synchronized)方法,多线程带来的线程不安全的问题就可以既轻松又有效地解决掉,但是随之带来的是拖垮性能,需知道,同步一个方法可能造成程序执行效率下降100倍。但是,如果应用程序可以接受getInstance()造成的额外负担,便可以考虑该做法。如果是将getInstance( )的程序使用在频繁运行的地方,则可能需要重新考虑了。


(3)饿汉模式--(线程安全)。

设计模式-单例模式(Singleton Pattern)解析

      利用这个方法,需要依赖JVM在加载这个类时马上创建此唯一的单例实例。JVM保证在任何线程访问uniqueInstance静态变量之前,一定先创建此实例。


(4)双重检查模式--(线程安全)。

设计模式-单例模式(Singleton Pattern)解析

     这做法大大地减少getInstance( )带来的时间耗费,大大提升了性能。

 

 注意! (双重检查模式不适用于1.4及更早版本的Java)。