手把手教你寫各種單例模式

2021-10-02 06:45:04 字數 1515 閱讀 4045

class

bank

/** * 定義靜態變數,存放該物件。

*/private

static bank instance=

newbank()

;/**

* 返回物件的方法

*/public

static bank createinstance()

}

優點:

執行緒安全。

不足:物件載入時間過長。因為靜態物件是在類載入的時候進行載入,所以在占用記憶體的時間較長。

class

bank

/** * 定義靜態變數,存放該物件。

*/private

static bank instance=null;

/** * 返回物件的方法

*/public

static bank createinstance()

return instance;

}}

優點:

延遲物件的建立,需要該物件的時候,在進行載入,可以降低記憶體空間的浪費。

不足:延遲物件的建立,如果有多個執行緒,同時呼叫createinstance()方法,則會建立出多個單例物件。

class

bank

/** * 定義靜態變數,存放該物件。

*/private

static bank instance=null;

/** * 返回物件的方法

*/public

static bank createinstance()

return instance;}}

}

優點:

1、延遲物件的建立,不會過多的占用記憶體。

2、執行緒安全,因為針對createinstance()是單執行緒的。

不足:效率較低,因為建立好物件以後,該方法仍然相當於是單執行緒的。

class

bank

/** * 定義靜態變數,存放該物件。

*/private

static bank instance=null;

/** * 返回物件的方法

*/public

static bank createinstance()

}}return instance;

}}

這種方式相比較於懶漢同步鎖而言,它效率更高一些。

原因:因為第一次時,物件並沒有建立,所以需要單執行緒,來防止生成多個單執行緒物件,但是一旦物件例項化完成,該方法做單執行緒也沒有意義。所以**先進行判斷,檢視是否例項化,如果例項化完,就直接返回。

如果您還是看不懂,那麼請繼續看下面的例子。

例如:

剛出蘋果手機的時候,門店裡面就僅僅只有一台蘋果手機,所以此時,第乙個人從前門進去,買完手機,然後從後門出去,此時第二個人進來的時候,手機已經沒有了,第三個人進來的時候,也是如此。所以就考慮讓他們同時進來,從而提高效率

手把手教你寫Undo Redo程式

手把手教你寫 undo redo程式 undo redo 操作是很多具體編輯功能的軟體所不能缺少的。最典型兩種型別就是文字編輯和影象編輯軟體。然而它的實現在某種程度上來說也不是很簡單。我也廢話少說。要在程式中支援 undo redo 操作,就需要儲存一些必要的資訊,這個是眾所周知的。如果想支援無限級...

手把手教你寫Undo Redo程式

手把手教你寫undo redo程式 undo redo操作是很多具體編輯功能的軟體所不能缺少的。最典型兩種型別就是文字編輯和影象編輯軟體。然而它的實現在某種程度上來說也不是很簡單。我也廢話少說。要在程式中支援undo redo操作,就需要儲存一些必要的資訊,這個是眾所周知的。如果想支援無限級的und...

手把手教你寫ORM(三)

昨天處於暈死狀態,少寫了乙個元件,還需要乙個元件用來專門管理cache的,這裡說道為什麼要分這麼多元件,其實這是習慣問題,很多人喜歡寫乙個很大的dll,不過我比較喜歡拆分,小粒度的專案比較好管理和單獨測試,把用單元測試驗證好了的小組件湊起來除錯和寫成乙個巨大的dll慢慢一行行的追蹤 肯定是前者更加舒...