php設計模式之工廠模式

2021-08-19 13:36:27 字數 3523 閱讀 6530

在 1994 年,由 erich gamma、richard helm、ralph johnson 和 john vlissides 四人合著出版了一本名為 design patterns - elements of reusable object-oriented software(中文譯名:設計模式 - 可復用的物件導向軟體元素) 的書,該書首次提到了軟體開發中設計模式的概念。

工廠設計模式提供獲取某個物件的新例項的乙個介面,同時使呼叫**避免確定實際例項化基類步驟。很多高階模式都是依賴於工廠模式

1). php中能夠建立基於變數內容的類的新例項,減少主**流中的基於條件複雜性;

2). 同時如果類發生改變不需要所有的地方進行修改,只需要在工廠中進行修改

1.  簡單工廠模式

<?php

/** *

* 工廠方法模式

* * */

inte***ce db

/** *@class 服務端開發(不知道誰將會被呼叫)

* * */

class dbmysql implements db

}class dbsqlite implements db

}/**

*定義乙個工廠介面

* * */

inte***ce factory

/** *實現工廠介面

* */

class mysqlfactory implements factory

}class sqlitefactory implements factory

}/**

*新新增乙個oracle

* */

class dboracle implements db

}class oraclefactory implements factory

}$fact = new mysqlfactory();

$db = $fact->createdb();

$db->conn();

// $fact = new sqlitefactory();

// $db = $fact->createdb();

// $db->conn();

// $fact = new oraclefactory();

// $db = $fact->createdb();

// $db->conn();

2.  工廠方法模式

<?php

/*簡單工廠模式factory,提供乙個工廠方法供客戶端呼叫,且簡單工廠模式又稱靜態工廠方法模式,之所以可以這麼說,是因為簡單工廠模式是通過乙個靜態方法來建立物件的。

但可能違反開閉原則。

什麼是開閉原則?

軟體實現應該對擴充套件開放,對修改關閉,其含義是說乙個軟體實體應該通過擴充套件來實現變化,而不是通過修改已有的**來實現變化的

*//**

*@class 服務端開發(不知道誰將會被呼叫)

* 事例一

* * */

class dbmysql

}class dbsqlite

}class factory elseif ($type == 'sqlite') else }}

$db = factory::createdb('mysql');

// $db = factory::createdb('sqlite');

$db->conn();

/** *@class 服務端開發(不知道誰將會被呼叫)

*事例二

* */

// inte***ce db

// class dbmysql implements db

// }

// class dbsqlite implements db

// }

// class factory elseif ($type == 'sqlite') else

// }

// }

// $db = factory::createdb('mysql');

// // $db = factory::createdb('sqlite');

// $db->conn();

3.  抽象工廠模式

<?php

/** *抽象工廠 :用來生產不同產品族的全部產品。

* * 乙個系統不應當依賴於產品類例項何如被建立,組合和表達的細節,

* 這對於所有形態的工廠模式都是重要的。這個系統有多於乙個的產品族,

* 而系統只消費其 中某一產品族。同屬於同乙個產品族的產品是在一起

* 使用的,這一約束必須在系統的設計中體現出來。系統提供乙個產品類

* 的庫,所有的產品以同樣的介面出現,從 而使客戶端不依賴於實現。

* ** */

//共同介面

inte***ce people

/** *@class 服務端開發(不知道誰將會被呼叫)

* */

class oneman implements people

}class twoman implements people

}class twowoman implements people

}class onewoman implements people

}/**

* * 建立工廠

* 注意:這裡將物件的建立抽象成了乙個介面

* */

inte***ce createpeople

/** * class factoryman 用於建立男人物件的工廠類-繼承createpeople

*/class factoryman implements createpeople

// 建立第二個男人

public function createtwo()

}/**

* class factorywomen 用於建立女人物件的工廠類-繼承createpeople

*/class factorywomen implements createpeople

// 建立第二個女人

public function createtwo()

}// $factory = new factoryman();

// $man = $factory->createone();

// $man->say();

// $man = $factory->createtwo();

// $man->say();

$factory = new factorywomen();

$woman = $factory->createone();

$woman->say();

$woman = $factory->createtwo();

$woman->say();

這篇部落格能給你帶來幫助

php設計模式之工廠模式

一直都對php的設計模式有著一種特殊的 情結 從最開始接觸到的單例模式,到經典的mvc設計模式,每次的接觸都讓我為之驚奇。買了本php設計模式在家看,發現,都是專有名詞,再加上太專業的術語,讓我沒有看下去的勇氣。無意之中逛論壇,發現乙個部落格,關於php的五種設計模式,其中就有工廠模式。看完後,第一...

php設計模式之工廠模式

工廠模式的最大優點在於建立物件上面,就是把建立物件的過程封裝起來,這樣隨時可以產生乙個新的物件。減少 進行複製粘帖,耦合關係重,牽一發動其他部分 通俗的說,以前建立乙個物件要使用new 現在把這個過程封裝起來了。假設不使用工廠模式 那麼很多地方呼叫類a 就會這樣子建立乙個例項 new a 假設某天需...

php模式設計之 工廠模式

那麼何為工廠模式?從名字來看,似乎看不出什麼端倪。工廠模式,和生產有關?還是和生產流程 子了,所謂工廠模式還真和生產有關。生產什麼呢?生產出來的是乙個例項物件。通過什麼裝置生產?通過乙個工廠類生產。怎麼生產呢?工廠類呼叫自身靜態方法 來生產物件例項。工廠模式有乙個關鍵的構造,根據一般原則命名為fac...