1、简介
(1)意图
保证一个类仅有一个实例,并且提供一个访问它的全局访问点。
(2)待解决的问题
a.允许重入,多线程并发访问b.解决多线程访问时的性能c.需要的时候才被构造,减少占用的资源
2、android 源码中单例模式举例
/**
* Factory used by TextView to create new Editables. You can subclass
* it to provide something other than SpannableStringBuilder.
*/
public static class Factory {
private static Editable.Factory sInstance = new Editable.Factory();
public static Editable.Factory getInstance() {
return sInstance;
}
public Editable newEditable(CharSequence source) {
return new SpannableStringBuilder(source);
}
}
文件:android_4_3/frameworks/base/core/java/android/text/Editable.java
这个例子中使用的是比较简单的饿汉模式,解决了不存在多线程同步的问题,不需加锁,多线程的情况下不存在访问性能问题,但是一开始就创造出来会浪费资源,并且不能在创建的时候传入参数。
3、C++实现(饿汉模式)
class Singleton
{
public:
Singleton * getInstance();
private:
Singleton(){};
virtual ~Singleton(){};
private:
static Singleton * mInstance;
};
Singleton * Singleton::mInstance = new Singleton();
Singleton * Singleton::getInstance()
{
return mInstance;
}