確保乙個類只有乙個例項,並提供乙個全域性訪問點。
應用場景:執行緒池、登錄檔、任務管理器、日誌物件、充當印表機、顯示卡等裝置的驅動程式等的物件。
class singleton
public
static singleton getinstance()
return instance;
}}
缺點:多執行緒下有可能 new 出多個不同的例項。
為什麼?
假設有兩個執行緒 a 和 b 都呼叫了方法 getinstance():
- a 判斷完 instance 為空,準備 new;此時 b 也對 instance 進行判斷,因為 a 還沒 new,所以 b 判斷也是空,也準備 new。
- a new 完了,b 接著又 new 乙個,結果就出現了兩個不同的例項。
class singleton
// 加上 synchronized 同步
// 保證同一時間不會有別的執行緒進入該方法
public
static
synchronized singleton getinstance()
return instance;
}}
缺點:確實解決了多執行緒的問題,但是也造成了效能浪費。因為只有第一次 new 時才需要同步,之後每次還進行同步就顯得累贅了。
class singleton
public
static singleton getinstance()
}
缺點:如果不是經常使用到的例項,也是會造成效能浪費。
class singleton
public
static singleton getinstance() }}
return instance;
}}
Head First 設計模式筆記
將變化部分和不變部分分離出來,讓 適應變化 封裝變化 針對介面程式設計,而不是針對實現程式設計 即,將一類行為抽象成行為類介面,可以應對變化,符合原則1 多用組合,少用繼承 這條原則,是建立在原則2的基礎上的,好處是系統有很大的彈性,執行時可以動態改變物件的行為 例如 策略模式 定義演算法簇 學會使...
Head First 設計模式筆記
1.找出應用中可能變化的地方,將它們獨立出來。不要和那些不需要變化的部分混在一起 2.針對介面程式設計,而不是針對實現程式設計 針對 介面程式設計 的意思是 針對超型別程式設計 針對介面程式設計關鍵在於多型。利用多型程式設計師可以針對超型別程式設計,編譯器執行會根據實際情況執行到真正的行為,而不會將...
head first 設計模式 工廠模式筆記
工廠模式 是舉了個做pizza的例子 有pizzastore抽象類裡邊有個pizza物件變數,orderpizza中裡面有個方法 叫做createpizza,同時外面定義了乙個createpizza抽象方法,然後實現裡面有個方法 叫做createpizza,此方法更具不同的引數new不同的對 象,如...