單例模式:
通過提供自身共享例項的訪問,單例設計模式用於限制特定物件只能被建立一次。
使用場景:
一般資料庫例項都會用單例模式
實現:
單例設計模式就是要乙個類只能例項化乙個物件。
要想讓乙個類只能例項化乙個物件,就要讓類先不能例項化物件,就是構造方法私有。
現在,要想例項化該類必須通過訪問靜態方法來例項化改類
為了防止例項多次,需要通過乙個成員變數來控制加以判斷
因為靜態方法不能訪問非靜態成員,所以宣告的成員也要是靜態的,同時防止外部訪問該成員,還要私有
classsingleton //
構造方法私有,防止new例項化。
public
static function getinstance()
private function __clone(){}
//防止clone物件。
private function __wakeup(){}
//防止使用序列化。
function query($sql)}/*
通過靜態方法例項化
*/$db =singleton::getinstance();
//訪問物件中的成員
$db->query("
select * from user
");
工廠模式:
工廠類就是乙個專門用來建立其它物件的類。所有地方載入類都走工廠方法。
註冊樹模式:
小工程並不實用,對於大工程方便管理生成物件。
三個模式的結合使用:
乙個資料庫的單例模式,通過工廠方法呼叫,生成的物件註冊到註冊樹中。
<?php/*** 單例模式 */
trait singleton
public
static
function
getinstance()
return self::$_instance
; }
final
private
function
__clone()
}/** * 資料庫類,通過trait使用單例模式 */
class
database}/*
* * 工廠方法,生成物件 */
class
loader
return
$obj
; }}/*
* * 註冊樹類,訪問工廠建立好的物件 */
class
objectfinder
return
null
; }
/*** 註冊物件
* @param $cls
* @param $obj
* @return bool
*/public
static
function register($cls, $obj
)
self::$_object[$cls] = $obj
;
return
true
; }
/*** 銷毀物件
* @param $cls
*/public
static
function destory($cls
)
}}//
建立乙個
$db = loader::loadobject("database");
設計模式 單例模式 工廠模式
1.單例設計模式 乙個類中只能有乙個物件 分為 懶漢單例模式和餓漢單例模式 懶漢單例模式 1.私有化構造器 2.宣告本類引用的型別,不要去指向物件 3.提供乙個公共靜態的方法,為外部提供物件,先判斷引用型別是否為物件,如果不是,則引用指 向乙個new 類名 並返回 如果有就返回這個引用 public...
設計模式(工廠模式,單例模式)
設計模式設計模式 gof gang of four 設計模式是指前人在長期的開發經驗中 總結出來的一套用於解決特定問題的套路 設計模式原則 1 工廠模式 示例 工廠模式思想 靜態工廠模式 author whd public abstract class carclass benz extends c...
設計模式 工廠模式與單例模式
工廠方法模式的用意是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類中。工廠模式完全負責設計原則,降低了物件之間的耦合度。很明顯工廠方法模式依賴於抽象的架構,將例項化的任務交由子類去完成,同時也有非常好的拓展性。先寫乙個pizza介面,那麼乙個香噴噴的pizza要做好就需要經過如下四個步驟!...