C++ 版
内部静态变量的懒汉实现,在instance函数里定义一个静态的实例,也可以保证拥有唯一实例,在返回时只需要返回其指针就可以了。
class Singleton
{
protected:
Singleton()
{
pthread_mutex_init(&mutex);
}
public:
static pthread_mutex_t mutex;
static Singleton* initance();
};
pthread_mutex_t Singleton::mutex;
Singleton* Singleton::initance()
{
pthread_mutex_lock(&mutex);
static Singleton obj;
pthread_mutex_unlock(&mutex);
return &obj;
}
C# 版
多线程下的单例模式,考虑了线程安全
public class Singleton
{
private static Singleton instance;
private static object _lock=new object();
private Singleton()
{
}
public static Singleton GetInstance()
{
if(instance==null)
{
lock(_lock)
{
if(instance==null)
{
instance=new Singleton();
}
}
}
return instance;
}
}
Java 版
public class SingletonDemo {
private volatile static SingletonDemo instance;
private SingletonDemo(){
}
public static SingletonDemo getInstance(){
if(instance==null){
synchronized (SingletonDemo.class){
if(instance==null){
instance=new SingletonDemo();
}
}
}
return instance;
}
}
FYI
单例模式其实有很多种实现形式,这里只是选了个人比较常用的版本,便于自己忘记的时候可以马上使用。