參考文章:
一:單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項。
(1)要點主要有三個:
1.乙個類只能有乙個物件;
2.必須是自行建立這個類的物件;
3,要想整個系統提供這乙個物件;
(2)從具體實現角度來說,就是以下三點:
一是單例模式的類只提供私有的建構函式,
二是類定義中含有乙個該類的靜態私有物件,
三是該類提供了乙個靜態的公有的函式用於建立或獲取它本身的靜態私有物件。
四當然還要有乙個private的clone方法,防止轉殖
二:優點
(1)例項控制
單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。
(2)靈活性
因為類控制了例項化過程,所以類可以靈活更改例項化過程。
三:缺點
(1)開銷
雖然數量很少,但如果每次物件請求引用時都要檢查是否存在類的例項,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。
(2)可能的開發混淆
使用單例物件(尤其在類庫中定義的物件)時,開發人員必須記住自己不能使用new關鍵字例項化物件。因為可能無法訪問庫源**,因此應用程式開發人員可能會意外發現自己無法直接例項化此類。
(3)物件生存期
不能解決刪除單個物件的問題。在提供記憶體管理的語言中(例如基於.net framework的語言),只有單例類能夠導致例項被取消分配,因為它包含對該例項的私有引用。在某些語言中(如 c++),其他類可以刪除物件例項,但這樣會導致單例類中出現懸浮引用。。(此處不是很懂,求解)
<?php
/** * created by phpstorm.
* user: hx213
* date: 2018/7/23
* time: 18:02
*/class
a //4.轉殖函式--不作任何事情,替換預設的值拷貝返回另乙個例項的函式
function
__clone
() {}
//5.提供乙個在類外獲取靜態類物件的公有靜態方法介面
static
public
function
getonly
($b)
return
self::$_a;
}//6.一些普通函式
學習php單利模式
主要解決乙個全域性的類被頻繁建立和銷毀物件。created by phpstorm.user lengshengren date 2017 10 30 time 下午10 38 instance 必須宣告靜態的私有變數 設定建構函式為私有函式,防止外部直接建立物件 getinstance 必須為公有...
設計模式 單利模式
單例模式的核心是保證乙個類只有乙個例項,並且提供乙個訪問例項的全域性訪問點。1 spring中bean物件的模式實現方式 2 servlet中每個servlet的例項 3 springmvc框架中,控制器物件是單例模式 4 專案中,讀取配置檔案的類,一般也只有乙個物件。沒有必要每次使用配置檔案資料,...
設計模式 單利
單利設計模式 解決乙個類在記憶體只存在乙個物件 步驟 1 建構函式私有化 2 類中建立本類物件 3 提供乙個方法可以獲取到該物件 1 餓漢式 class single private static single s new single public static single getinstanc...