1、廢話不多說,先上**
2、什麼是單例模式?
單例模式就是保證系統中乙個類只有乙個例項,也就是說只能在類內部自己new自己產生唯一例項並對外提供
3、單例模式的實現
三私一共:私有化儲存物件的例項、私有化建構函式、私有化轉殖函式,公開提供例項的方法
① 私有化乙個靜態屬性用於存放唯一的例項
② 私有化構造方法、私有化轉殖方法
③ 公有化靜態方法,用於向系統提供這個例項
4、單例模式內屬性和方法用private、static的原因
private:
屬性:屬性使用private可以防止在類外直接呼叫該屬性,可能會對儲存的物件例項進行修改,單例模式是要通過這個類獲取唯一的例項。
方法:私有化構造方法防止類外直接new類產生物件,私有化clone方法,防止clone物件,使用clone會自動呼叫__clone()方法,私有化
的clone方法不可訪問,故不能clone
最後提供乙個外部可訪問的方法提供類的唯一例項,所以用public
static:(參考
程式呼叫類中的方法只有兩種方式,(1)建立類的乙個物件,用該物件呼叫類種的方法(2)使用類名直接呼叫類中的方法,格式:類名::方法名()
構造方法私有化後(1)不能用,只能用(2)。使用類名直接呼叫類種的方法,類中的方法必須是靜態的,所以公開的提供例項的方法必須是靜態的(static),
而靜態方法不能訪問非靜態成員變數,因此類自定義的例項變數也必須是靜態的
5、應用場景舉例
② 印表機(裝置管理器):當有兩台印表機,在輸出同乙個檔案的時候只一台印表機進行輸出
③ 資料庫連線池(控制資源):一般是採用單例模式,因為資料庫連線是一種連線資料庫資源,不宜頻繁建立和銷毀。(資料庫軟體系統中使用資料庫連線池,主
要是節省開啟或者關閉資料庫連線所引起的效率損耗,這種效率的損耗還是非常昂貴的,因此採用單例模式來維護就可以大大降低這種損耗
④ 應用程式的日誌(資源共享):一般日誌內容是共享操作,需要在後面不斷寫入內容,所以通常使用單例模式
6、單例模式的優缺點
優點:① 減少記憶體開銷,尤其是頻繁的建立和銷毀例項,節省了cpu
② 避免對資源過多的占用
③ 靜態物件公用,節省了記憶體
④ 功能解耦,**已維護
缺點:① 沒有抽象層,不能繼承,擴充套件很難
② 違背了「單一職責原則」,乙個類只重視內部關係而忽略外部關係
③ 不適用於變化的物件
④ 濫用單例會出現一些負面問題,如為節省資源將資料庫連線池物件設計為單例,可能會導致共享連線池物件對程式過多而出現連線池溢位。如果例項化物件長時間不被利用
系統會認為是垃圾而被**,這樣將導致物件狀態丟失
1 單例模式
乙個類只能有乙個例項。比如印表機這種東西。trick在於 變數,構造方法都必須為private,所以其他類new它的構造方法是不行的,直接呼叫變數也不行。只能呼叫getinstance 方法 其他被public修飾的方法。getinstance 方法記得用public修飾。原理 public cla...
1 單例模式
某個物件只需要乙個例項的情況,比方說gamemanager,resourcemanagerusing system namespace 單例模式 定義公有方法提供乙個全域性訪問點,同時你也可以定義公有屬性來提供全域性訪問點 public static singleton getinstance 構造...
單例模式1
1 餓漢式 author version 0.1 單例模式 餓漢式 建立時進行例項化 1 私有化構造方法 2 建立私有例項 static 3 建立公共類方法 static 方法輸出單例 public class singleton5 公共方法 public static singleton5 get...