下面是工廠的另一種變化,你靜態(tài)地調(diào)用了一個工廠類:
class Product { function getList() { $db =& DbConnectionBroker::getConnection(); //... } } class DbConnectionBroker { function &getConnection() { return new MysqlConnection(DB_USER, DB_PW, DB_NAME); } }
這里DbConnectionBroker::getConnection()產(chǎn)生的效果和前面的一樣 ,但這樣卻很有好處: 我們不必在每個需要連接數(shù)據(jù)庫的類中加入調(diào)用new MysqlConnection(DB_USER , DB_PW, DB_NAME)的方法。
當(dāng)然另一種變化就是引用一個外部工廠對象的資源,和這個對象定義了數(shù)據(jù)庫連接的參數(shù):
class Product { var $_db_maker; function setDbFactory(&$connection_factory) { $this->_db_maker =& $connection_factory; } function getList() { $db =& $this->_db_maker->getConnection(); //... } }
最后,一個工廠可以用一個函數(shù)合理的組織,然后實現(xiàn):
function &make_db_conn() { return new MysqlConnection(DB_USER, DB_PW, DB_NAME); } class Product { function getList() { $bar =& make_db_conn(); //... } }
下面是一個工廠的理想化執(zhí)行的 UML 類圖:
出處:
責(zé)任編輯:bluehearts
上一頁 php設(shè)計模式介紹之工廠模式 [1] 下一頁 php設(shè)計模式介紹之工廠模式 [3]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|