設計模式之單件模式

來源:互聯網
上載者:User

標籤:class   blog   java   get   使用   資料   

一、概述

/*
    一般情況下,我們建立的一些類是屬於工具性質的,基本不用儲存太多的跟自身有關的資料,在這種情況下,每次都去new一個對象,即增加了開銷,也使得代碼更加臃腫。
    其實,我們只需要一個執行個體對象就可以。如果採用全域或者靜態變數的方式,會影響封裝性,難以保證別的代碼不會對全域變數造成影響。
    考慮到這些需要,我們將預設的建構函式聲明為私人的,這樣就不會被外部所new了,甚至可以將解構函式也聲明為私人的,這樣就只有自己能夠刪除自己了。
    在Java和C#這樣純的物件導向的語言中,單例模式非常好實現,直接就可以在靜態區初始化instance,然後通過getInstance返回,這種就被稱為餓漢式單例類。
    也有些寫法是在getInstance中new instance然後返回,這種就被稱為懶漢式單例類,但這涉及到第一次getInstance的一個判斷問題。

    單例模式常常與原廠模式結合使用,因為工廠只需要建立產品執行個體就可以了,在多線程的環境下也不會造成任何的衝突,因此只需要一個工廠執行個體就可以了。
 */

/*
   @單件模式: Singleton
   一) 特點
   1) 最為簡單,最為常見,最容易實現,最應該熟悉和掌握。相當於面向過程中的全域變數(對象)
   2) 通過一個static成員變數來記錄這一個唯一的對象執行個體,通過一個static成員介面獲得這個唯一的執行個體。
   3) Singleton不可以被執行個體化,因此其建構函式應該聲明為protected或private

   二)優缺點:
   優點
   1.減少了時間和空間的開銷(new執行個體的開銷)。
   2.提高了封裝性,使得外部不易改動執行個體。

   缺點
   1.懶漢式是以時間換空間的方式。
   2.餓漢式是以空間換時間的方式。

 */

二、類圖

三、代碼

Singleton.h

#pragma once#include <iostream>using namespace std;class Singleton{public:    static Singleton *GetInstance();private:static Singleton *m_sInstance;private:/*     * @brief Singleton不可以被樣本化,所以將建構函式聲明為protected或者private。     */    Singleton();~Singleton();};

 

Singleton.cpp

#include "Singleton.h"#include "stdio.h"Singleton::Singleton(){    cout<<__FUNCTION__<<endl;}Singleton::~Singleton(){cout<<__FUNCTION__<<endl;}Singleton* Singleton::m_sInstance = NULL;Singleton *Singleton::GetInstance(){    if ( NULL == m_sInstance )    {        m_sInstance = new Singleton();    }    return m_sInstance;}

 

main.cpp

#include "Singleton.h"#include <iostream>using namespace std;int main(int argc, char *argv[]){    Singleton *sgn1 = Singleton::GetInstance();Singleton *sgn2 = Singleton::GetInstance();if (sgn1 == sgn2 ){printf("sgn1==sgn2\n");}    return 0;}

 

四、運行結果

Singleton::Singleton
sgn1==sgn2
請按任意鍵繼續. . .

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.