7.7.4 單態(tài)(單例、單件)設(shè)計模式
單態(tài)模式的主要作用是保證在面向?qū)ο缶幊淘O(shè)計中,一個類只能有一個實例對象存在。
<?php
class DB {
private static $obj = null; //聲明一個私有的,靜態(tài)的成員屬性$obj
private function __construct() { //私有構(gòu)造方法,只能在類的內(nèi)部實例化對象
echo "連接數(shù)據(jù)庫成功<br>";
}
public static function getInstance() { // 通過此靜態(tài)方法才能獲取本類的對象
if(is_null(self::$obj)) //如果本類中的$obj為空,說明還沒有被實例化過
self::$obj = new self(); //實例化本類對象
return self::$obj; //返回本類的對象
}
public function query($sql) { //執(zhí)行SQL語句完成對數(shù)據(jù)庫的操作
echo $sql;
}
}
$db = DB::getInstance(); //只能使用靜態(tài)方法getInstance()去獲取DB類的對象
$db -> query("select * from user"); //訪問對象中的成員
test.php
<?php
/*
* 單態(tài)(單例, 單件)設(shè)計模式 -- 最適合PHP使用這個設(shè)計模式
*
*
* 1. 如果想讓一個類, 只能有一個對象, 就要先讓這個類, 不能創(chuàng)建對象 , 將構(gòu)造方法 private
*
* 2. 可以在類的內(nèi)存使用一個表態(tài)方法,來創(chuàng)建對象
*
*
*/
class Person {
static $obj = null;
private function __construct() {
}
static function getObj() {
//如果第一次調(diào)用時, 沒有對象則創(chuàng)建, 以后調(diào)用時, 直接使用第一次創(chuàng)建的對象
if(is_null(self::$obj))
self::$obj = new self;
return self::$obj;
}
function __destruct() {
echo "################<br>";
}
function say() {
echo "aaaaaaaaaaaaaaaaa<br>";
}
}
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p = Person::getObj();
$p -> say();