1 單例模式

2022-07-18 06:06:10 字數 1408 閱讀 9434

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...