意图
保证一个类仅有一个实例,并提供一个它的全局访问点。
适用性
- 当类只能有一个实例而且客户可用从一个众所周知的访问点访问它时
- 当这个唯一实例应该通过子类化可扩展的,并且客户端应该无需更改代买就能使用一个扩展的实例时
实现
/**
* 线程不安全单例(懒汉式单例类.在第一次调用的时候实例化)
*/
public class SingletonDemo {
private static SingletonDemo instance = null;
private SingletonDemo() {}
public static SingletonDemo getInstance() {
if (instance == null) {
instance = new SingletonDemo();
}
return instance;
}
// other methods...
}
/**
* 多线程单例(饿汉式单例类:在类初始化时,已经自行实例化)
*/
public class SingletonDemo {
private static SingletonDemo instance = new SingletonDemo();
private SingletonDemo() {
}
public static SingletonDemo getInstance() {
return instance;
}
// other methods...
}
/**
* 线程安全单例(懒汉式单例类.在第一次调用的时候实例化)
*/
public class SingletonDemo {
private static SingletonDemo instance = null;
private SingletonDemo() {
}
public synchronized static SingletonDemo getInstance() {
if (instance == null) {
instance = new SingletonDemo();
}
return instance;
}
// other methods...
}
/**
* 线程安全单例(内部类式中,实现了延迟加载)
*/
public class SingletonDemo {
private static class InnerSingleton {
private static final SingletonDemo instance = new SingletonDemo();
}
private SingletonDemo() {
}
public static SingletonDemo getInstance() {
return InnerSingleton.instance;
}
// other methods...
}
更多参照:
http://blog.csdn.net/magister_feng/article/details/6602756