单例模式的要点有如下特点:
1.单例类只能有一个实例。
2.单例类必须自己创建自己的唯一的实例。
3.单例类必须向其它所有对象提供这一实例。
单例类在JAVA中的实现一般有两种方式:
1.饿汉式单例类(EagerSingleton)。在类被加载的时候,就初始化类的实例。
2.懒汉式单例类(LazySingleton)。在类被第一次调用的时候,才初始化类的实例。
单例类在JAVA中的实现,一般要遵循以下的实现方式:
1.类定义为final类型。这样定义的类将无法被继承。
2.私有成员变量的类型为类本身,一般命名为_INSTANCE。
3.默认构造函数为private类型,这样外部对象无法实例化这个类。
4.为外部提供一个取得唯一实例的静态方法,这个方法一般命名为getInstance。
单例类添加处理多线程的能力时,在getInstance方法的修饰符中,添加synchronized关键字。
下面给出两种单例模式的实现代码:
饿汉式单例类:
懒汉式单例类:
1.单例类只能有一个实例。
2.单例类必须自己创建自己的唯一的实例。
3.单例类必须向其它所有对象提供这一实例。
单例类在JAVA中的实现一般有两种方式:
1.饿汉式单例类(EagerSingleton)。在类被加载的时候,就初始化类的实例。
2.懒汉式单例类(LazySingleton)。在类被第一次调用的时候,才初始化类的实例。
单例类在JAVA中的实现,一般要遵循以下的实现方式:
1.类定义为final类型。这样定义的类将无法被继承。
2.私有成员变量的类型为类本身,一般命名为_INSTANCE。
3.默认构造函数为private类型,这样外部对象无法实例化这个类。
4.为外部提供一个取得唯一实例的静态方法,这个方法一般命名为getInstance。
单例类添加处理多线程的能力时,在getInstance方法的修饰符中,添加synchronized关键字。
下面给出两种单例模式的实现代码:
饿汉式单例类:
/**
* 饿汉式单例类。
* 使用关键字final,防止被继承。
* @author cws
*
*/
public final class EagerSingleton {
//类加载时即初始化实例。
private final static EagerSingleton _INSTANCE = new EagerSingleton();
/**
* 私有构造器。
* 防止外部实例化。
*/
private EagerSingleton() {
}
/**
* 向外部对象提供唯一实例的静态方法。
* synchronized关键字为方法添加多线程的处理能力。
* @return
*/
public synchronized static EagerSingleton getInstance() {
return _INSTANCE;
}
}
懒汉式单例类:
/**
* 懒汉式单例类。
*
* @author cws
*
*/
public final class LazySingleton {
private static LazySingleton _INSTANCE = null;
private LazySingleton() {
}
public synchronized static LazySingleton getInstance() {
if (_INSTANCE == null) {
_INSTANCE = new LazySingleton();
}
return _INSTANCE;
}
}