學(xué)習(xí)php設(shè)計模式 php實現(xiàn)單例模式(singleton)
保證一個類僅有一個實例,并且提供一個訪問它的全局訪問點。
單例模式有三個特點:
1、一個類只有一個實例
2、它必須自行創(chuàng)建這個實例
3、必須自行向整個系統(tǒng)提供這個實例
一、單例模式結(jié)構(gòu)圖
二、單例模式中主要角色
Singleton 定義一個Instance操作,允許客戶訪問它的唯一實例。Instance是一個類方法。負責(zé)創(chuàng)建它的唯一的實例。
三、單例模式的優(yōu)點
1、對唯一實例的受控訪問
2、縮小命名空間 單例模式是對全局變量的一種改進。它避免了那些存儲唯一實例的全局變量污染命名空間
3、允許對操作和表示的精華 單例類可以有子類。而且用這個擴展類的實例來配置一個應(yīng)用是很容易的。你可以用你所需要的類的實例在運行時刻配置應(yīng)用。
4、允許可變數(shù)目的實例(多例模式)
5、比類操作更靈活
四、單例模式適用場景
1、當(dāng)類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時
2、當(dāng)這個唯一實例應(yīng)該是通過子類化可擴展的。并且用戶應(yīng)該無需更改代碼就能使用一個擴展的實例時。
五、單例模式與其它模式】
工廠方法模式(factory method模式):單例模式使用工廠模式來提供自己的實例。
抽象工廠模式(abstract factory模式):抽象工廠模式可以使用單例模式,將具體工廠類設(shè)計成單例類。
建造者模式(Builder模式):建造模式可以將具體建造類設(shè)計成單例模式。
五、單例模式PHP示例
<?php /** * 懶漢式單例類 */ class Singleton { /** * 靜態(tài)成品變量 保存全局實例 */ private static $_instance = NULL; /** * 私有化默認構(gòu)造方法,保證外界無法直接實例化 */ private function __construct() { } /** * 靜態(tài)工廠方法,返還此類的唯一實例 */ public static function getInstance() { if (is_null(self::$_instance)) { self::$_instance = new Singleton(); } return self::$_instance; } /** * 防止用戶克隆實例 */ public function __clone(){ die('Clone is not allowed.' . E_USER_ERROR); } /** * 測試用方法 */ public function test() { echo 'Singleton Test!'; } } /** * 客戶端 */ class Client { /** * Main program. */ public static function main() { $instance = Singleton::getInstance(); $instance->test(); } } Client::main(); ?>
以上就是使用php實現(xiàn)單例模式的代碼,還有一些關(guān)于單例模式的概念區(qū)分,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
PHP使用memcache緩存技術(shù)提高響應(yīng)速度的方法
這篇文章主要介紹了PHP使用memcache緩存技術(shù)提高響應(yīng)速度的方法,以實例形式分析了memcache緩存技術(shù)的使用技巧,具有一定的參考借鑒價值,需要的朋友可以參考下2014-12-12單臺服務(wù)器的PHP進程之間實現(xiàn)共享內(nèi)存的方法
這篇文章主要介紹了單臺服務(wù)器的PHP進程之間實現(xiàn)共享內(nèi)存的方法,需要的朋友可以參考下2014-06-06php正則提取html圖片(img)src地址與任意屬性的方法
下面小編就為大家?guī)硪黄猵hp正則提取html圖片(img)src地址與任意屬性的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02