singleton pattern這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。
這種模式涉及到乙個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不需要例項化該類的物件。
意圖
:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。
主要解決
:乙個全域性使用的類頻繁地建立與銷毀。
何時使用
:當您想控制例項數目,節省系統資源的時候。
如何解決
:判斷系統是否已經有這個單例,如果有則返回,如果沒有則建立。
關鍵**
:建構函式是私有的。
優點
: 1、在記憶體裡只有乙個例項,減少了記憶體的開銷,尤其是頻繁的建立和銷毀例項(比如管理學院首頁頁面快取)。 2、避免對資源的多重占用(比如寫檔案操作)。
缺點
:沒有介面,不能繼承,與單一職責原則衝突,乙個類應該只關心內部邏輯,而不關心外面怎麼樣來例項化。
/
*- 類的構造方法宣告為私有的或受保護的,這樣就不能在類的外部使用new建立物件
- 在類的內部用乙個私有的或受保護的的靜態變數儲存該類的例項物件
- 提供乙個公共的靜態方法獲取該類的例項物件
- 類的構造方法宣告為final,這樣就不能在類繼承的時候修改;
- 限制轉殖
*/
典型場景:怎麼做到類只有乙個例項
<?php
class
single
return self:
:$ins;
}//private:禁止外部new final:禁止繼承修改許可權
private final function __construct(
)//封鎖clone
private final function __clone()}
$s1 = single:
:getinc();
$s2 = single:
:getinc();
//兩物件指向同乙個zval結構體的時候才是同一物件
if($s1 ==
= $s2)
else
弱型別語言設計模式深造 策略模式
設計模式理解 設計模式 一套經驗的總結,解決方案,智慧型和思想 為了可重用,可靠性 特點 定義了乙個問題 定義了乙個解決方案 語言無關性 定義了一組詞彙,有助於交流 促進良好設計 為協作而設計的 設計模式核心 命名 簡潔性,描述性 問題 找出問題,避免誤用和過度使用 解決方案 模式描述了乙個問題的解...
設計模式 建立型別之單例模式
鏈結 吐槽在我的理解裡 每一種設計模式僅僅是一種思想,並不是說每個設計模式之間就會有很明確的邊界。有時候你會覺得某兩種設計模式實現起來特別像,其實是因為有些的設計模式延伸出來的僅僅是著重的看待點不一樣而已 學習設計模式一定不是只學習固定的實現方式。要了解設計思想,然後在專案中靈活得進行最適合設計。單...
設計模式 單例模式
單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...