1. 程式人生 > >C++單例模式getInstance()——設計模式(1)

C++單例模式getInstance()——設計模式(1)

所謂單例模式就是一個類有且只有一個例項;

單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設計模式。其意圖是保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點,該例項被所有程式模組共享。有很多地方需要這樣的功能模組,如系統的日誌輸出,GUI應用必須是單滑鼠,MODEM的聯接需要一條且只需要一條電話線,作業系統只能有一個視窗管理器,一臺PC連一個鍵盤。
單例模式有許多種實現方法,在C++中,甚至可以直接用一個全域性變數做到這一點,但這樣的程式碼顯的很不優雅。使用全域性物件能夠保證方便地訪問例項,但是不能保證只宣告一個物件——也就是說除了一個全域性例項外,仍然能建立相同類的本地例項。

物件的例項化方法,也是比較多的,最常用的方法是直接使用

new,而這是最普通的,如果要考慮到其它的需要,如單例項模式,層次間呼叫等等。
直接使用new就不可以實現好的設計好,這時候需要使用間接使用new,即getInstance方法。這是一個設計方式的代表,而不僅僅指代一個方法名
 1. new的使用:
      
Object _object = new Object(),這時候,就必須要知道有第二個Object的存在,而第二個Object也常常是在當前的應用程式域中的,
可以被直接呼叫的
 2. GetInstance
的使用:
      
在主函式開始時呼叫,返回一個例項化物件,此物件是static的,在記憶體中保留著它的引用,即記憶體中有一塊區域專門用來存放靜態方法和變數,

可以直接使用,呼叫多次返回同一個物件。
 3.
兩者區別對照:
     
大部分類(非抽象類/介面/遮蔽了constructor的類)都可以用newnew就是通過生產一個新的例項物件,或者在棧上宣告一個物件,每部分的呼叫
用的都是一個新的物件。
getInstance
是少部分類才有的一個方法,各自的實現也不同。
getInstance在單例模式(保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點)的類中常見,用來生成唯一的例項,getInstance往往是static的。
(1)
物件使用之前通過getInstance得到而不需要自己定義,用完之後不需要delete
(2)new 一定要生成一個新物件,分配記憶體;
getInstance()則不一定要再次建立,它可以把一個已存在的引用給你使用,這在效能上優於new
(3) new建立後只能當次使用,而getInstance()可以跨棧區域使用,或者遠端跨區域使用。所以getInstance()通常是建立static靜態例項方法的。
總結:
       getInstance這個方法在單例模式用的甚多,為了避免對記憶體造成浪費,直到需要例項化該類的時候才將其例項化,所以用getInstance來獲取該物件,
至於其他時候,也就是為了簡便而已,為了不讓程式在例項化物件的時候,不用每次都用new關鍵字,索性提供一個instance方法,不必一執行這個類就初始化,這樣做到不浪費系統資源!單例模式可以防止資料的衝突,節省記憶體空間!

  1. //使用例項,在定義的新類當中加入getInstance()方法,返回值即為該類的一個物件,此方法常常應用在Java的單例模式當中
  2. public class OAuthConstant {  
  3.     public static synchronized OAuthConstant getInstance(){  
  4.         if(instance == null)  
  5.             instance = new OAuthConstant();  
  6.         return instance;  
  7.     }  
  8. }  
  9. //主函式當中使用此類的getInstance()函式,即可得到系統當前已經例項化的該類物件,若當前系統還沒有例項化過這個類的物件,則呼叫此類的建構函式
  10. //例項化一個物件,並返回
  11. OAuthConstant.getInstance();  

相關推薦

C++模式getInstance()——設計模式1

所謂單例模式就是一個類有且只有一個例項; 單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設計模式。其意圖是保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點,該例項被所有程式模組共享。有很多地方需要這樣的功能模組,如系統的日誌輸出,GUI應用必須是單滑鼠,MODEM的聯接需要一條且只需要一條電話線

大話設計模式C++實現-第3.4.5-設計原則1

第三章-單一職責原則 (1).就一個類而言,應該僅有一個引起它變化的原因。 (2)如果一個類承擔的職責過多,就等於把這些職責耦合在了一起,一個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當發生變化時,設計會遭受到意想不到的破壞。 (3)軟體設計真正要做

使用和工廠設計模式實現dao實現層的解耦

建立Dao具體例項的工廠:         工廠解耦: 只需在配置檔案中改動,而不需要修改原始碼                       各層之間耦合性極低       使用的設計模式: 單例 和 工廠                       ***********

《大話設計模式》——讀後感 8好菜每回味不同——建造者模式之基礎案例1

ted builds src ret 分離 args 類圖 rec 方法 建造者模式:是將一個復雜的對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 建造者模式通常包括下面幾個角色: 1. builder:給出一個抽象接口,以規範產品對象的各個組成成分的

設計模式設計原則

擴展 原因 依賴 設計原則 細節 面向接口 編程 面向 size 一:   單一職責原則:就一個類而言,應該只有一個引起它變化的原因。 二:   開閉原則:軟件實體對擴展開放,對修改關閉。 三:   裏式代換原則:子類型必須能夠替換掉它們的父類型。 四:   依賴倒轉原則:

設計模式設計原則

font 通過 size 模式 span 通信 轉發 設計模式 其他 五:   接口分離原則:不應該強迫程序依賴它們不需要使用的方法。即,一個接口不需要提供太多的行為,一個接口應該只提供一種對外的功能,不應該把所有的操作都封裝到一個接口中。 六:   迪米特原則:一個對象應

設計模式】-附錄A1

一.什麼是設計模式? “每一個模式描述了一個在我們周圍不斷重複發生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重複的勞動” 二.面向物件,面向過程的區別和聯絡 面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步的實現,使用的時候一個

設計模式六大設計原則:開閉原則

開發十年,就只剩下這套架構體系了! >>>   

設計模式 - 七大設計原則- 迪米特法則與里氏替換原則

概述 簡單介紹一下七大設計原則: 開閉原則:是所有面向物件設計的核心,對擴充套件開放,對修改關閉 依賴倒置原則:針對介面程式設計,依賴於抽象而不依賴於具體 單一職責原則:一個介面只負責一件事情,只能有一個原因導致類變化 介面隔離原則:使用多個專門的介面,而不是使用一個總介面 迪米特法則(最少知道原則):

設計模式06——設計原則1

# 設計原則 設計原則,是設計模式的內功心法,基本所有的設計模式都是基於設計原則進行的具體化,如果說設計模式是如何操作的話,那麼設計原則就是為何這麼做的基石,因此,只要我們能充分理解設計原則,那麼在此基礎上,對設計模式就能更好的理解,甚至能自己設計出一種設計模式來。 ## 單一職責原則 ###

C/C++語法淺談六大設計原則——依賴倒置原則Dependence Inversion Principle

一. 前言 眾所周知,在軟體開發過程中,我們的六大設計原則與二十三種設計模式可以說是我們開發的思想精髓。然而,網上或者書本大多數的資料都是以java、python等其他語言語法進行介紹與闡述,很少有以C/C++的語法進行深入介紹。鑑於此,本人以淺薄的見識對這些精妙的思想做以總結,方便

Web API應用架構設計分析1

人員管理 門面 guid orm 和平 ide 額外 簡化 響應 Web API應用架構設計分析(1) Web API 是一種應用接口框架,它能夠構建HTTP服務以支撐更廣泛的客戶端(包括瀏覽器,手機和平板電腦等移動設備)的框架, ASP.NET Web API 是一種

C語言指針的使用例子1指針地址的輸出

clu 用例 int clas 指針 light 使用 指針的使用 div #include <stdio.h> int main(void) { int a=10; int *p = &a; *p = 89; printf("變量

基於Visual C++之Windows核心程式設計程式碼分析1實現裝置管理器列舉裝置

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

ASIO—下一代C++標準可能接納的網路庫1簡單的應用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Leetcode題解之設計問題1shuffle an arrays

題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/24/design/58/ 題目描述: 打亂一個沒有重複元素的陣列。 示例: // 以數字集合 1, 2 和 3 初始化陣列。

演算法設計思想1——貪婪法

概念 貪婪法(greedy algorithm),又稱為貪心演算法,是尋找最優解問題的常用方法。這種方法模式一般將求解過程分成若干個步驟,在每個步驟都應用貪心原則,選取當前狀態下最好的或者最優的選擇,並以此希望最後堆疊出的結果也是最好的或者最優的解。 貪婪法每次決策都以當前情況為

C++學習之迴圈和關係表示式1

在c語言中我這部分還算學習的挺好,所以這部分我只新增一些我不太懂的點: 1.通常,cout在顯示bool值之前將它們轉換為int,但是在前面使用cout.setf(ios:boolalpha)函式呼叫設定了一個標記,該標記命令cout顯示true和false,而不是1和0;

cas點登入原理簡單介紹1

SSO簡介 1.1 單點登入定義 單點登入(Single sign on),英文名稱縮寫SSO,SSO的意思就是在多系統的環境中,登入單方系統,就可以在不用再次登入的情況下訪問相關受信任的系統。也就是說只要登入一次單體系統就可以。計劃在專案中加入單點登入,開發

C++疑難點解讀-程式設計入門概念1

程式=資料結構+演算法 資料結構:一個物件所包含的屬性,形如自然界中的個體,例如大樹的直徑,高度等等 演算法:用於對物件進行操作,即對物件的屬性進行操作 程式:用於解決某些物件的方法 物件:即某個事物的具體屬性+所能對自己或可能對他人屬性作修改的動作 類:從總結角度