代码改变世界

Singleton(单例模式)

2010-12-13 10:16  OCaml  阅读(353)  评论(0编辑  收藏  举报

Singleton pattern的思想:

               一个类能返回对象的一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称)。如果类持有的引用不为空就返回这个引用,如果为空就需要创建这个类的实例,并将这个实例赋值给该类持有的引用。最后还要返回这个引用。私有构造方法创建唯一的实例,static方法接口来获取唯一实例的引用。其实就是全局变量而已。

 

 

Singleton pattern的UML图解:

 

 Singleton pattern的使用时机:

               怎个运行过程中只需要有一个实例时。比如说我们联合我们的AbstractFactory模式使用。AbstractFactory接口就是一个单例。

 

 

 

Singleton pattern的优点:

              容易保持数据同步和共享。

 

 

 

Singleton pattern的缺点:

                           在多线程编程的情况下会产生竞争,比如当唯一实例还没有创建时,两个进程同时调用创建方法。显然他们同时检测唯一实例不存在。各自都构造一个实例,这样就有两个实例被创建出来。这不就违背了唯一实例的原则!解决办法可以给指示类的是否已经实例化的变量加一个互斥锁。

 

Singleton pattern的示例代码: