1、单例模式的意图:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
所谓的全局访问点,在代码层次表现为类中的静态函数,通过类名即可调用。
2、单例模式类图:
角色:
- SingletonClass:通过一个类的public static的成员函数,允许用户类访问它的唯一实例;同时用一个私有的SingletonClass类型的静态成员变量来引用它的唯一实例。
协作:
- 用户类只能通过单例类(SingletonClass)公开的静态成员函数来获取单例类的唯一实例。
3、适用性:
- 当类只能有一个实例而且用户可以从一个众所周知的访问点访问它时。
- 当类可通过子类化来进行扩展,且系统中只能存在所有子类中的一个时。
4、代码实现:
1 package com.crazysnail.singleton; 2 3 public class Singleton { 4 private static Singleton theSingleton; 5 6 public static Singleton getInstance(){ 7 if(theSingleton==null) 8 theSingleton = new Singleton(); 9 10 return theSingleton;11 }12 13 protected Singleton(){14 /*对类中的数据成员进行初始化操作*/15 }16 17 /*类的其他域和相关的操作*/18 }
5、单例模式的特点:
- 确保了实例的唯一性
- 由类本身控制了唯一实例的实例化过程,可以方便的修改类的实例化过程
- 每次对象请求引用时都要检查是否存在类的实例,这造成一定的开销