单例模式(Singleton)

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式有以下特点:

  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一的实例。
  • 单例类必须能给所有其他对象提供这一实例。

 

UML类图

Singleton

 

代码实现

饿汉式单例类

在单例类被加载时就将自己实例化

懒汉式单例类

在单例类第一次被引用时将自己实例化

登记式单例类

登记式单例类是为了克服饿汉式和懒汉式单例类均不可继承的缺点而设计的。

这里的实现为父类饿汉式,子类懒汉式,且子类只能是懒汉式。

由于子类必须允许父类以构造方法调用产生实例,因此,它的构造方法必须是公开的。这样一来就等于允许了以这样的方式产生实例而不在父类的登记中,这是登记式单例类的一个缺点。

由于父类的实例必须存在才可能有子类的实例,这在有些情况下是一个浪费,这是登记式单例类的另一个缺点。

 

RegSingleton类

RegSingletonChild类

 

优点

在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象使用单例模式无疑可以提高系统的性能。

 

使用场合

在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来说,如果一个类可以有几个实例共存,那么就没有必要使用单例类。

 

参考文献

  • 《大话设计模式》 作者:程杰,清华大学出版社
  • 《Java与模式》 作者:阎宏,电子工业出版社

 

 

 

Categories: 设计模式