基礎設計模式 單例模式 工廠模式 註冊樹模式

2021-09-08 10:10:16 字數 1905 閱讀 5373

單例模式:

通過提供自身共享例項的訪問,單例設計模式用於限制特定物件只能被建立一次。

使用場景:

一般資料庫例項都會用單例模式

實現:

單例設計模式就是要乙個類只能例項化乙個物件。

要想讓乙個類只能例項化乙個物件,就要讓類先不能例項化物件,就是構造方法私有。

現在,要想例項化該類必須通過訪問靜態方法來例項化改類

為了防止例項多次,需要通過乙個成員變數來控制加以判斷

因為靜態方法不能訪問非靜態成員,所以宣告的成員也要是靜態的,同時防止外部訪問該成員,還要私有

class

singleton //

構造方法私有,防止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要做好就需要經過如下四個步驟!...