1. 程式人生 > >編寫一個單例類

編寫一個單例類

在面試的時候,單例模式是經常被提問到的,編寫一個Singleton類,可以更好的向面試官展現出自己對單例模式的理解。下面我列舉出四個方式在展示Singleton類

1.簡單的方式,但這個有一個缺點,那就是在併發執行時,可能存在多個例項。

複製程式碼
 1 public class SingletonDemo1 {
 2     private static SingletonDemo1 INSTANCE;
 3     private SingletonDemo1(){
 4         
 5     }
 6     public static SingletonDemo1 getInstance(){
7 if(INSTANCE==null){ 8 INSTANCE = new SingletonDemo1(); 9 } 10 return INSTANCE; 11 } 12 }
複製程式碼

2.公共域的方式,特點就是簡單,缺點就是做不到在返回的過程中做額外的邏輯處理,所以引申出可以用工廠來展示單例模式。

複製程式碼
1 public class SingletonDemo2 {
2     public static final SingletonDemo2 INSTANCE = new SingletonDemo2();
3 private SingletonDemo2(){ 4 5 } 6 7 }
複製程式碼

3.工廠化方式,特點是可以在例項過程中新增邏輯。

複製程式碼
 1 public class SingletonDemo3 {
 2     public static final SingletonDemo3 INSTANCE = new SingletonDemo3();
 3     private SingletonDemo3(){
 4         
 5     }
 6     public static SingletonDemo3 getInstance(){
7 return INSTANCE; 8 } 9 10 }
複製程式碼

4.列舉方式,最佳實踐,推薦使用,並且他不會存在多個例項化的問題以及反序列化的問題。

複製程式碼
1 public enum SingletonDemo4 {
2     INSTANCE;
3     
4     public static void saySomthing(String str){
5         System.out.println("hello"+str);
6     }
7 }
複製程式碼

Main方法測試:

複製程式碼
 1 public class Main {
 2 
 3     public static void main(String[] args) {
 4         // TODO Auto-generated method stub
 5         System.out.println("SingletonDemo1"+SingletonDemo1.getInstance());
 6         System.out.println("SingletonDemo1"+SingletonDemo1.getInstance());
 7         
 8         System.out.println("SingletonDemo2"+SingletonDemo2.INSTANCE);
 9         System.out.println("SingletonDemo2"+SingletonDemo2.INSTANCE);
10 
11         System.out.println("SingletonDemo3"+SingletonDemo3.getInstance());
12         System.out.println("SingletonDemo3"+SingletonDemo3.getInstance());
13 
14         System.out.println("SingletonDemo4"+SingletonDemo4.INSTANCE);
15         System.out.println("SingletonDemo4"+SingletonDemo4.INSTANCE);
16         
17         SingletonDemo4.INSTANCE.saySomthing("SingletonDemo4");
18     }
19 
20 }
複製程式碼

測試結果輸出:通過執行結果可以看到,每個用例都被例項化一次,這就是單例模式的精髓:全域性資源共享。

相關推薦

編寫一個

在面試的時候,單例模式是經常被提問到的,編寫一個Singleton類,可以更好的向面試官展現出自己對單例模式的理解。下面我列舉出四個方式在展示Singleton類 1.簡單的方式,但這個有一個缺點,那就是在併發執行時,可能存在多個例項。 1 public clas

php實現工廠--傳遞同一個名只產生僅僅一個物件

單例類工廠 用來傳遞類,併產生相應的單例物件,但是物件需要引入這個ModelFacetory類檔案以及通過ModelFacetory::M(類名)這種方式來直接例項化 獲得物件. class ModelFactory{ static $class_instance=array();  

(Singleton)一個始終只能建立一個例項

單例類(Singleton)一個類始終只能建立一個例項 構造器使用private修飾、;提供一個public方法作為該類的訪問點,該方法必須使用static修飾來作為類成員;使用一個成員變數快取已經建

一個

就是寫一個例項化一次的類 即把構造私有化,外部無法例項化他。通過呼叫他的靜態方法,判斷是否例項化了,未例項化則例項化並返回,已例項化則返回已例項化的。 一: /** * 基於雙重檢查鎖定的單例模式 * @author zongzhimin *

的總結

單例 防止 懶漢 new str pub 兩種 test rgs /** * 單例類的兩種方法。 * 1.餓漢式 * 當類一加載就開始創建對象 * 2.懶漢式 * 當需要使用到類的對象是調用類的類方法才開始創建對象,想比較上面而言是 * 懶漢式。 * 註意,單例類的特點:

java 核心學習筆記(四)

com null tools 初始化 equal inf div 特殊 對象 如果一個類始終只能創建一個實例,那麽這個類被稱作單例類。 一些特殊的應用場景可能會用到,為了保證只能創建一個實例,需要將構造方法用private修飾,不允許在類之外的其它地方創建類的實例。 又要保

定義一個設計Singleton

使用方法 urn print 單例 void hello ins system 私有 class Singleton{ private static Singleton instance;//內部實例化對象 public static Singleto

練習創建一個模式例子

eve jpg closed div 使用 htm stop http pla 昨天有寫過一個單例模式的練習。《單例模式(C#)》 寫得較為復雜,今天再使用另外的方法來實現: class Au { private static

java

創建 singleton new 初始 light 構造 args ret println public class SingleTonDemo { public static void main(String[] args) { SingleTon.getSin

題二:寫一個模式

餓漢 ret gets col ets int ati sta println /** * 2、寫一個單例模式 */ public class Test2 { public static void main(String[] args) {

C++設計模式的思考

變量初始化 平時 單例 nag 綜合 工廠 設計模式的 使用方法 第一個 本次博文假設有一個Manager管理類,並以此為探究單例類的設計模式。 一般作法 類聲明: class Manager{ public: ~Manager(); //提供單例對象訪問 sta

模板(五十一)

單例模式 單例類模板 設計模式 抽象類模板 在有些時候,我們在進行架構設計時,某些類在整個系統生命期中最多只能有一個對象存在(Single Instance)。比如在超市的收銀系統,一個掃描機就對應一個,每個屏幕也會對應一個,基於這種情況,我們就提出了單例模式。那麽問題就來了:

java的幾種實現

nta span 安全 let 實例化 註意 style 獲取 單例類 一,最簡單的方式 public class Singleton{ private Singleton(){}; private static Singleton instanc

python

init one div __new__ urn sel 有一個 spa turn class Single: __ISINCTANCE = None def __new__(cls, *args, **kwargs): if not cl

get col tin string ont null println int 實例 如果一個類始終只能創建一個實例, 1 class Singleton { 2 public static Singleton instance; 3 priva

一個模式的實現

歡迎大家點評,這是個人寫的一個單例模板 #pragma once //單例模板 #include <windows.h> class CrsLock { public: CrsLock(){ InitializeCriticalSection(&m_cr

Java併發程式設計中的設計模式解析(二)一個的七種寫法

Java單例模式是最常見的設計模式之一,廣泛應用於各種框架、中介軟體和應用開發中。單例模式實現起來比較簡單,基本是每個Java工程師都能信手拈來的,本文將結合多執行緒、類的載入等知識,系統地介紹一下單例模式的演變,並體現在7種不同的單例設計中。說到這個,非常像孔乙己裡那個“回字有四種寫法”的梗,不過與封建迂腐

繼承MonoBehaviour的

1、MonoSingleton  using UnityEngine; public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoBehaviour { public bool glo

C++筆記 第六十二課 模板---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第六十二課 單例類模板 1.單例模式 需求的提出 在構造設計時,某些類在整個系統生命期中最多隻能有一個物件存在(Single Instance). 2.問題 如何定義

java day25 多執行緒(下) (Runtime,Timer

25.01_多執行緒(單例設計模式)(掌握) 單例設計模式:保證類在記憶體中只有一個物件。 如何保證類在記憶體中只有一個物件呢? (1)控制類的建立,不讓其他類來建立本類的物件。private (2)在本類中定義一個本類的物件。Singl