php實現設計模式中的單例模式詳解,php設計模式詳解_PHP教程

來源:互聯網
上載者:User

php實現設計模式中的單例模式詳解,php設計模式詳解


【概要】

保證一個類僅有一個執行個體,並且提供一個訪問它的全域訪問點【GOF95】

【特點】

1、一個類只有一個執行個體
2、它必須自行建立這個執行個體
3、必須自行向整個系統提供這個執行個體

【結構圖】

【主要角色】

Singleton定義一個Instance操作,允許客戶訪問它的唯一執行個體。Instance是一個類方法。負責建立它的唯一的執行個體。

【優缺點】

1、對唯一執行個體的受控訪問
2、縮小命名空間 單例模式是對全域變數的一種改進。它避免了那些儲存唯一執行個體的全域變數汙染命名空間
3、允許對操作和表示的精華 單例類可以有子類。而且用這個擴充類的執行個體來配置一個應用是很容易的。你可以用你所需要的類的執行個體在運行時刻配置應用。
4、允許可變數目的執行個體(多例模式)
5、比類操作更靈活

【適用性】

1、當類只能有一個執行個體而且客戶可以從一個眾所周知的訪問點訪問它時
2、當這個唯一執行個體應該是通過子類化可擴充的。並且使用者應該無需更改代碼就能使用一個擴充的執行個體時。

【單例模式php執行個體】

複製代碼 代碼如下:
<?php
/**
* 單例模式
* -------------
* @author zhaoxuejie
* @package design pattern
* @version v1.0 2011-12-14
*/
class Singleton {

//私人靜態成員變數,儲存全域執行個體
private static $instance = NULL;

//私人構造方法,保證外界無法直接執行個體化
private function __construct(){}

//靜態方法,返回此類唯一執行個體
public static function getInstance(){
if(!isset(self::$instance)){
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}

//測試用方法
public function info(){
return 'ok';
}

//防止複製
public function __clone(){
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}

$s = Singleton::getInstance();
echo $s->info();
?>


php設計模式: 寫出原廠模式與單態模式的PHP5範例程式碼

Example #1 調用Factory 方法(帶參數)

class Example
{
// The parameterized factory method
public static function factory($type)
{
if (include_once 'Drivers/' . $type . '.php') {
$classname = 'Driver_' . $type;
return new $classname;
} else {
throw new Exception ('Driver not found');
}
}
}
?>
------------------------------------
Example #2 單例模式

class Example
{
// 儲存類執行個體在此屬性中
private static $instance;

// 構造方法聲明為private,防止直接建立對象
private function __construct()
{
echo 'I am constructed';
}

// singleton 方法
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}

return self::$instance;
}

// Example類中的普通方法
public function bark()
{
echo 'Woof!';
}

// 阻止使用者複製對象執行個體
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}

}

?>
 

PHP的單態設計模式

對於java轉過來程式員說是單態設計模式,在PHP上通常說是單例模式,說法不一樣,手冊上也有介紹:

單例模式(Singleton)用於為一個類產生一個唯一的對象。最常用的地方是資料庫連接。 使用單例模式產生一個對象後,該對象可以被其它眾多個物件所使用。
class Example
{
// 儲存類執行個體在此屬性中
private static $instance;

// 構造方法聲明為private,防止直接建立對象
private function __construct()
{
echo 'I am constructed';
}

// singleton 方法
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}

return self::$instance;
}

// Example類中的普通方法
public function bark()
{
echo 'Woof!';
}

// 阻止使用者複製對象執行個體
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}

}

?>

這樣我們可以得到一個獨一無二的Example類的對象。

// 這個寫法會出錯,因為構造方法被聲明為private
$test = new Example;

// 下面將得到Example類的單例對象
$test = Example::singleton();
$test->bark();

// 複製對象將導致一個E_USER_ERROR.
$test_clone = clone $test;
?>
 

http://www.bkjia.com/PHPjc/892261.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/892261.htmlTechArticlephp實現設計模式中的單例模式詳解,php設計模式詳解 【概要】 保證一個類僅有一個執行個體,並且提供一個訪問它的全域訪問點【GOF95】 【特...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.