面試題 單例模式及其五種實現方式

2021-08-17 18:38:46 字數 1560 閱讀 4654

只有乙個例項

自行例項化(必須建立自己的唯一例項)

向整個系統提供這個例項

通俗一點的說就是,保證乙個類只有乙個例項,並且提供乙個訪問該例項的全域性訪問點。

單例模式主要是通過以下思路實現:

其中在提供私有的靜態屬性時就new例項,稱為餓漢式(餓了就吃), 在提供的公共的靜態方法中new例項,成為懶漢式(餓了才開始做)。

1.餓漢式單例:執行緒安全,呼叫效率高,不能延時載入

public class singleton 

//靜態工廠方法,對於此方法的呼叫,都會返回同乙個物件引用

public static singleton getinstance()

}

餓漢式:

2.懶漢式單例:執行緒不安全,呼叫效率不高,可以延時載入

private static singleton singleton = null;

private singleton()

public static singleton getsingleton()

return singleton;

}

懶漢式:

private static singleton singleton = null;     

private singleton()

public static synchronized singleton getsingleton()

return singleton;

}

注:同步鎖雖然解決了多個singleton物件問題,但每次呼叫getsingleton()方法都要同步,會導致允許效率低下。

private static singleton singleton = null;     

private singleton()

public static singleton getsingleton() }}

return singleton;

}

雙重檢測鎖式:

private static class singletonclassinstance

private singleton()

public static singleton getsingleton()

靜態內部類式:

public enum singleton 

}

列舉式:

說明:中國歷史上的皇帝通常僅有一人。為了保障其唯一性,古人採用玉璽等來進行防偽標識。更簡單的方法是限制皇帝的建立。比如,使用單例模式來保證皇帝的唯一性。

emperor類:

public class emperor

public static emperor getemperor()

return emperor;

}}

注意執行緒安全問題,可以自己思考以下改動(^u^)ノ~yo

單例模式的五種實現方式

1.最容易想到的方式 public class singleton public static singleton getinstance public static void main string args 優點是 簡單 缺點是 無論用沒用到instsnce,都會進行初始化。2.延遲載入 laz...

單例模式的五種實現方式

單例模式 無論在什麼時候,該類只有乙個例項。實現單例模式的要點就是提供乙個私有的無參建構函式。一 餓漢單例模式public class singleobject public static singleobject getinstance 二 懶漢單例模式 懶漢的意思就是慢悠悠的,不著急,也就是在呼...

單例設計模式 面試題

設計模式 必須對於多個程式使用同乙個配置資訊物件時,就需要保證其物件的唯一性 如何保證物件的唯一性 不允許其程式new建立物件 在該程式中建立乙個本類例項 對外提供乙個方法讓其他方法可以獲取該物件 2.步驟 私有化該 建構函式 通過new建立乙個在本類物件 定義乙個公有的方法,將建立物件返回.pub...