#### 1. 單例模式 --- 單例:一個類最多只能有一個對象,目的:保護資源的唯一性 單例模式(Singleton):通過代碼實現(xiàn)單例的設計思路、一個類最多只能產(chǎn)生一個對象的設計思想 #### 2. 三私一公 --- 單例模式設計規(guī)范:三私一公 + 私有化構造方法: 禁止在類外無限實例化對象 + 私有化克隆方法: 禁止對象無限克隆對象 + 私有化靜態(tài)屬性: 保存類內(nèi)部實例化得到的對象 + 公有化靜態(tài)方法: 允許外部通過調(diào)用類內(nèi)部方法獲取對象 **a. 私有化構造方法** ``` 對象的產(chǎn)生方式之一是通過實例化類,而在類外部實例化是一種不可控行為,所以應該禁止類在外部被實例化 類在外部實例化本質上是在類外部調(diào)用了構造方法, 私有化構造方法可使其不能在類外部掉用構造方法,也就是實現(xiàn)了禁止類在外部被實例化``` **b. 公有靜態(tài)方法** ``` 私有化構造方法只是不能在類外部實例化類,但是可以在類里面實例化,沒有對象,還想要訪問類中的方法,所以需要定義一個公有靜態(tài)方法,用于獲取類的實例(對象)``` **c. 私有化靜態(tài)屬性** ``` 提供公有靜態(tài)方法后,無限調(diào)用靜態(tài)方法依然可以得到多個對象。 要想只返回一個,則可將第一次產(chǎn)生的對象保存起來,以后如果要獲取對象直接返回第一次產(chǎn)生的對象``` **d. 私有化克隆方法** ``` 在類外部可以通過克隆對象來產(chǎn)生新的對象,私有化克隆方法可實現(xiàn)禁止類在外部被克隆``` #### 3. 單例模式設計類 --- ```php /** * 單例模式設計 */ class Singleton { /** * 私有靜態(tài)屬性 * 保存產(chǎn)生的對象 */ private static $obj; /** * 私有化構造方法 * 禁止類在外部實例化 */ private function __construct(){} /** * 類的入口 * 用于獲取類的實例 */ public static function getInstance() { if (self::$obj instanceof self) { return self::$obj; } else { self::$obj = new self; return self::$obj; } } /** * 私有化克隆方法 * 禁止類的實例在外部被克隆 */ private function __clone(){} } ```