在 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...