php單例模式

2021-08-21 21:50:10 字數 1397 閱讀 5773

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項。

要點主要有三個:

1.乙個類只能有乙個物件;

2.必須是自行建立這個類的物件;

3,要想整個系統提供這乙個物件;

從具體實現角度來說,就是以下三點:

一是單例模式的類只提供私有的建構函式,

二是類定義中含有乙個該類的靜態私有物件,

三是該類提供了乙個靜態的公有的函式用於建立或獲取它本身的靜態私有物件。

當然還要有乙個private的clone方法,防止轉殖;

一、例項控制

單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。

二、靈活性

因為類控制了例項化過程,所以類可以靈活更改例項化過程。

一、開銷

雖然數量很少,但如果每次物件請求引用時都要檢查是否存在類的例項,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。

二、可能的開發混淆

使用單例物件(尤其在類庫中定義的物件)時,開發人員必須記住自己不能使用new關鍵字例項化物件。因為可能無法訪問庫源**,因此應用程式開發人員可能會意外發現自己無法直接例項化此類。

三、物件生存期

不能解決刪除單個物件的問題。在提供記憶體管理的語言中(例如基於.net framework的語言),只有單例類能夠導致例項被取消分配,因為它包含對該例項的私有引用。在某些語言中(如 c++),其他類可以刪除物件例項,但這樣會導致單例類中出現懸浮引用。。(此處不是很懂,求解)

php單例**演示:

1 <?php 

2 //單例

3 class uni

13 //防止轉殖物件

14 private function __clone()

17 static public function getinstance($config)

23 return self::$instance;

24

25 }

26 public function getname()

29 }

30 $db1 = uni::getinstance(1);

31 $db1 -> getname();

32 echo "

";33 $db2 = uni::getinstance(4);

34 $db2 -> getname();

35 ?>

執行結果:

我被例項化了1

$db1建立物件後,引數是1

$db2沒有建立物件,而是直接使用$instance儲存的唯一物件,所以輸出的引數並沒有變為4;

PHP單例模式

模式對於oop開發人員尤其有用,因為他有助於建立穩定的api,並且仍然保持一定的靈活度。一種模式可以幫助我們定義負責完成特定任務的物件,還可以允許我們全部修改掉某個類而不用修改與這些類打交道的 前者被稱為類的職責,後者被稱為類的多型性。單例模式被當作職責模式,他用來在應用程式中建立乙個單一的功能訪問...

php單例模式

單例模式 單例類 1 建構函式需要標記為private 訪問控制 防止外部 使用new操作符建立物件 單例類不能在其他類中例項化,只能被其自身例項化 2 擁有乙個儲存類的例項的靜態成員變數 3 擁有乙個訪問這個例項的公共的靜態方法 常用getinstance 方法進行例項化單例類,通過instanc...

php 單例模式

單例模式 身份證號碼 單例類identitycardno 身份證號碼類 class identitycardno public function getinstance else return self instance private function setidentitycardno no p...