php設計模式之工廠模式淺析

分享下php工廠模式的一些內容。在php設計模式中,工廠模式用的比較多。

問題:怎麼輕鬆方便地建立這麼" 複雜 " 的對象即操作中不需要粘貼複製呢? 


解決方法 


建立一個工廠(一個函數或一個類方法)來製造新的對象。爲了理解工廠的用處, 試想以下的不同之處…… 


代碼: 

$connection =& new MySqlConnection($user, $password, $database); 


……使代碼可擴展和更簡潔…… 

$connection =& create_connection(); 


後者的代碼片斷集中在和數據庫連接的create_connect()工廠上 ,就像剛纔說的一樣,使創造數據庫連接的過程成爲一個簡單的操作—就像new操作一樣。工廠模式的優點就在創建對象上。 它的任務就是把對象的創建過程都封裝起來,然後返回一個所需要的新類。 


想改變對象的結構和建立對象的方式嗎? 你只需選擇對象工廠,對代碼的改變只需要一次就夠了。( 工廠模式的功能是如此強大, 它處於是應用的底層, 所以在許多其餘的複雜模式和應用中它會不停地出現。) 


樣本代碼 


工廠模式封裝了對象的建立過程。 你可以在對象本身創建對象工廠或者是一個額外的工廠類——這要看你具體的應用。讓我們看一個工廠對象的例子。 


數據庫連接的那部分屢次出現: 

// PHP  
class Product {  
function getList() { $db =& new MysqlConnection(DB_USER, DB_PW, DB_NAME);  
//...  
}  
function getByName($name) { $db =& new MysqlConnection(DB_USER, DB_PW, DB_NAME);  
//...  
}  
//...  
}

爲什麼這樣做不好? 數據庫連接的參數出現的地方太多了,當你把這些參數設成常量,意味着你統一定義並對他們進行賦值,顯然這種做法不是很妥當: 


你可以輕鬆地改變連接數據庫的參數,但你不能增加或改變這些參數地順序,除非你把所有連接代碼都改了。 

你不能輕鬆的實例化一個新類去連接另一種數據庫,比如說PostgresqlConnection。 

這樣很難單獨測試和證實連接對象的狀態。 

使用工廠設計模式,代碼將得到很大的改進: 

class Product {  
function getList() {  
$db =& $this->_getConnection();  
//...  
}  
function &_getConnection() {  
return new MysqlConnection(DB_USER, DB_PW, DB_NAME);  
}  
}

先前的類中存在很多調用new MysqlConnection(DB_USER,  DB_PW,  DB_NAME)的方法,現在都被集中到的_getConnection()方法上。 

參考鏈接:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章