03月11日 晴天 繼續放棄中,愛下不下
所在培訓機構有這么一個傳統,午休之后到14點半上課間,有30分鐘的學生演講時間,聽蔡班主的意思,演講目的是鍛煉我們口才,應對畢業后的面試,我是奇了個怪了,班上90多號人,2天修一點來算,畢業就輪2圈,2次演講就能鍛煉口才了?估摸著我們都是演講奇才吧,
今天輪到我演講了,本來可以用固定主題:我的家鄉,最后想想還是算了,就講一下當初應對軟考學得的設計模式:單例設計模式吧,
上臺前,說不緊張還是有點假,畢竟這么多人,能講利索就可以啦,我給自己的訂的最低要求,如果能得到滿堂彩,那最好,哈哈,想想就好了,
上臺后,再來一次自我介紹,然后進入正題:單例設計模式講解
我:單例設計模式,顧名思義就是一個類有且僅有一個實體物件,根據代碼實作方式不同分為:餓漢式,懶漢式,靜態內部類方式,列舉方式,
餓漢式:
public class Singleton {
//餓漢式單例
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
問:為啥叫餓漢呢?
答:你肚子餓了,你最想做啥,吃啊,很餓很餓時候,是不是迫不及待想去吃,餓漢式就是迫不及待想創建出一個單例出來,所以在類加載進記憶體馬上就構建出這個唯一單例,
問:為什么使用private修飾構造器
答:單例模式,有且只有一個實體,構造器私有目的就是禁用外界對實體構建,
問:餓漢式單例模式好處是啥?
答:簡單,方便,還執行緒安全,
懶漢式:
public class LazySingleton {
private static LazySingleton lazySingleton = null;
private LazySingleton() {
}
public static LazySingleton getInstance() {
if (lazySingleton == null) {
lazySingleton = new LazySingleton();
}
return lazySingleton;
}
}
問:為啥叫懶漢呢?
答:懶得動的意思啊,能不動就不動,懶漢式單例操作是在獲取唯一單實體時才進行實體創建,
問:懶漢式單例模式好處是啥?
答:沒啥特別的好處,硬要說就是延時實體的創建,另外操作不好,還會有執行緒安全問題,
問:標準的懶漢式單例模式長啥樣?
答:雙重檢查方式
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton newInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
靜態內部類:
public class Singleton {
private static class SingletonInstance{
private static final Singleton instance=new Singleton();
}
private Singleton(){}
public static Singleton getInstance(){
return SingletonInstance.instance;
}
}
問:為啥叫靜態內部類呢?
答:使用內部類的形式實作,
問:有啥好處啊?
答:執行緒安全的,有延時加載的效果,只有當呼叫getInstance方法時候才會加載內部類創建物件,
列舉:
public enum Singleton {
INSTANCE;
}
問:簡單粗暴,這是啥原理
答:沒啥原理,列舉定義出來后,實體個數就固定了,如果約定它實體只有1個,那就是單例啦
問:有啥好處啊?
答:執行緒安全,呼叫效率高,可以天然的防止反射和反序列化呼叫
問:反射跟反序列是啥
答:我也不知道,后面會學
綜合看,推薦使用靜態內部的方式,貪方便,就使用列舉方式,
一曲終了,附和者甚少,唉,這該死的孤獨~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289736.html
標籤:其他
