单例模式

Java

在Java语言中，单例模式(饿汉模式)应用的例子如下述代码所示：
  public class Singleton {
    private static final Singleton INSTANCE = new Singleton();
  
    // Private constructor suppresses
    // default public constructor
    private Singleton() {};
 
    public static Singleton getInstance() {
        return INSTANCE;
    }
  }
在Java编程语言中，单例模式(懒汉模式)应用的例子如下述代码所示(此种方法只能用在JDK5及以后版本(注意 INSTANCE 被声明为volatile)，之前的版本使用“双重检查锁”会发生非预期行为)：
  public class Singleton {
    private static volatile Singleton INSTANCE = null;
  
    // Private constructor suppresses 
    // default public constructor
    private Singleton() {};
  
    //Thread safe and performance  promote 
    public static  Singleton getInstance() {
        if(INSTANCE == null){
             synchronized(Singleton.class){
                 // When more than two threads run into the first null check same time, 
                 // to avoid instanced more than one time, it needs to be checked again.
                 if(INSTANCE == null){ 
                     INSTANCE = new Singleton();
                  }
              } 
        }
        return INSTANCE;
    }
  }

C++

在C++编程语言中，单例模式应用的例子如下述代码所示（这里仅仅提供一个示例；由于加入了锁，这代码是线程安全的）：
// ...class lock{
    public:
        lock();
        lock(lock const & l);
        ~lock();
        lock & operator =(lock const & l);
        void request();
        void release();
    // ...};lock::lock(){
    // ...}// ...lock::~lock(){
    // ...}// ...void lock::request(){
    // ...}void lock::release(){
    // ...}// ...// assumes _DATA_TYPE_ has a default constructortemplate<typename _DATA_TYPE_>class singleton{
    public:
        static _DATA_TYPE_ * request();
        static void release();

    private:
        singleton();
        singleton(singleton<_DATA_TYPE_> const & s);
        ~singleton();
        singleton<_DATA_TYPE_> & operator =(singleton<_DATA_TYPE_> const & s);
        static _DATA_TYPE_ * pointer;
        static lock mutex;
    // ...};template<typename _DATA_TYPE_>_DATA_TYPE_ * singleton<_DATA_TYPE_>::pointer = nullptr;template<typename _DATA_TYPE_>lock singleton<_DATA_TYPE_>::mutex;template<typename _DATA_TYPE_>_DATA_TYPE_ * singleton<_DATA_TYPE_>::request(){
    if(singleton<_DATA_TYPE_>::pointer == nullptr)
    {
        singleton<_DATA_TYPE_>::mutex.request();

        if(singleton<_DATA_TYPE_>::pointer == nullptr)
        {
            singleton<_DATA_TYPE_>::pointer = new _DATA_TYPE_;
        }

        singleton<_DATA_TYPE_>::mutex.release();
    }

    return singleton<_DATA_TYPE_>::pointer;}template<typename _DATA_TYPE_>void singleton<_DATA_TYPE_>::release(){
    if(singleton<_DATA_TYPE_>::pointer != nullptr)
    {
        singleton<_DATA_TYPE_>::mutex.request();

        if(singleton<_DATA_TYPE_>::pointer != nullptr)
        {
            delete singleton<_DATA_TYPE_>::pointer;
 
            singleton<_DATA_TYPE_>::pointer = nullptr;
        }

        singleton<_DATA_TYPE_>::mutex.release();
    }}template<typename _DATA_TYPE_>singleton<_DATA_TYPE_>::singleton(){
    // ...}// ...int main(){
    int * s;

    s = singleton<int>::request();

    // ...

    singleton<int>::release();

    return 0;}

GO

GO语言中的单例模式:
var _instance *servicevar once sync.Oncetype service struct {
Name string}func Service() *service {
once.Do(func() {
           _instance = &service{}
        })
return _instance}func (this *service) Startup() {}func (this *service) Stop() {}func (this *service) Restart() {}

Objective-C

OC语言中的单例模式:
@interface Control : NSObject+(id)getShare;@endstatic Control *mControl;@implementation Control+(id)getShare{
    if (mControl == nil) {
        mControl = [[Control alloc] init];
    }
    return mControl;}-(id)init {//你需要初始化的属性。。。}@end

PHP

PHP语言中的单例模式:
<?phpclass singleton{
    private function __construct()
    {
    }
    
    static public function instance()
    {
        static $obj = null;
        if($obj === null)
        {
            $obj = new self();
        }
        return $obj;
    }}?>