學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)單例模式(singleton)
保證一個(gè)類僅有一個(gè)實(shí)例,并且提供一個(gè)訪問它的全局訪問點(diǎn)。
單例模式有三個(gè)特點(diǎn):
1、一個(gè)類只有一個(gè)實(shí)例
2、它必須自行創(chuàng)建這個(gè)實(shí)例
3、必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例
一、單例模式結(jié)構(gòu)圖

二、單例模式中主要角色
Singleton 定義一個(gè)Instance操作,允許客戶訪問它的唯一實(shí)例。Instance是一個(gè)類方法。負(fù)責(zé)創(chuàng)建它的唯一的實(shí)例。
三、單例模式的優(yōu)點(diǎn)
1、對(duì)唯一實(shí)例的受控訪問
2、縮小命名空間 單例模式是對(duì)全局變量的一種改進(jìn)。它避免了那些存儲(chǔ)唯一實(shí)例的全局變量污染命名空間
3、允許對(duì)操作和表示的精華 單例類可以有子類。而且用這個(gè)擴(kuò)展類的實(shí)例來(lái)配置一個(gè)應(yīng)用是很容易的。你可以用你所需要的類的實(shí)例在運(yùn)行時(shí)刻配置應(yīng)用。
4、允許可變數(shù)目的實(shí)例(多例模式)
5、比類操作更靈活
四、單例模式適用場(chǎng)景
1、當(dāng)類只能有一個(gè)實(shí)例而且客戶可以從一個(gè)眾所周知的訪問點(diǎn)訪問它時(shí)
2、當(dāng)這個(gè)唯一實(shí)例應(yīng)該是通過子類化可擴(kuò)展的。并且用戶應(yīng)該無(wú)需更改代碼就能使用一個(gè)擴(kuò)展的實(shí)例時(shí)。
五、單例模式與其它模式】
工廠方法模式(factory method模式):?jiǎn)卫J绞褂霉S模式來(lái)提供自己的實(shí)例。
抽象工廠模式(abstract factory模式):抽象工廠模式可以使用單例模式,將具體工廠類設(shè)計(jì)成單例類。
建造者模式(Builder模式):建造模式可以將具體建造類設(shè)計(jì)成單例模式。
五、單例模式PHP示例
<?php
/**
* 懶漢式單例類
*/
class Singleton {
/**
* 靜態(tài)成品變量 保存全局實(shí)例
*/
private static $_instance = NULL;
/**
* 私有化默認(rèn)構(gòu)造方法,保證外界無(wú)法直接實(shí)例化
*/
private function __construct() {
}
/**
* 靜態(tài)工廠方法,返還此類的唯一實(shí)例
*/
public static function getInstance() {
if (is_null(self::$_instance)) {
self::$_instance = new Singleton();
}
return self::$_instance;
}
/**
* 防止用戶克隆實(shí)例
*/
public function __clone(){
die('Clone is not allowed.' . E_USER_ERROR);
}
/**
* 測(cè)試用方法
*/
public function test() {
echo 'Singleton Test!';
}
}
/**
* 客戶端
*/
class Client {
/**
* Main program.
*/
public static function main() {
$instance = Singleton::getInstance();
$instance->test();
}
}
Client::main();
?>
以上就是使用php實(shí)現(xiàn)單例模式的代碼,還有一些關(guān)于單例模式的概念區(qū)分,希望對(duì)大家的學(xué)習(xí)有所幫助。
- php單態(tài)設(shè)計(jì)模式(單例模式)實(shí)例
- php設(shè)計(jì)模式 Singleton(單例模式)
- 基于php設(shè)計(jì)模式中單例模式的應(yīng)用分析
- PHP設(shè)計(jì)模式之單例模式原理與實(shí)現(xiàn)方法分析
- PHP設(shè)計(jì)模式之抽象工廠模式實(shí)例分析
- PHP設(shè)計(jì)模式之簡(jiǎn)單工廠和工廠模式實(shí)例分析
- PHP設(shè)計(jì)模式之模板方法模式實(shí)例淺析
- PHP設(shè)計(jì)模式之工廠模式定義與用法詳解
- PHP設(shè)計(jì)模式之單例模式定義與用法分析
相關(guān)文章
CentOS系統(tǒng)中PHP安裝擴(kuò)展的方式匯總
本文給大家匯總介紹了CentOS系統(tǒng)中PHP安裝拓展的方式,主要有 包管理式 的 yum 安裝、pecl 安裝,以及 源碼編譯安裝??偨Y(jié)的非常全面,推薦給大家。2017-04-04
PHP獲取文件絕對(duì)路徑的代碼(上一級(jí)目錄)
PHP獲取文件絕對(duì)路徑,取得當(dāng)前文件所在的絕對(duì)目錄,取得當(dāng)前文件的上一層目錄名的實(shí)現(xiàn)代碼。2011-05-05
PHP整數(shù)取余返回負(fù)數(shù)的相關(guān)解決方法
PHP整數(shù)取余返回負(fù)數(shù)對(duì)于編程經(jīng)驗(yàn)不足的新手來(lái)說還是比較頭疼的一件事。希望通過本文介紹的內(nèi)容,大家能充分掌握這一解決辦法2014-05-05
php中關(guān)于token驗(yàn)證的相關(guān)問題詳解
這篇文章主要介紹了php中關(guān)于token驗(yàn)證的相關(guān)問題詳解的相關(guān)資料,需要的朋友可以參考下2023-05-05

