你如何能輕松方便地建立這么" 復雜 " 的對象即操作中不需要粘貼復制呢?

解決方法

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

代碼:

復制代碼 代碼 " /> 成人精品一区二区三区电影免费 ,亚洲精品永久免费,午夜精品美女久久久久av福利

色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

介紹php設計模式中的工廠模式

問題

你如何能輕松方便地建立這么" 復雜 " 的對象即操作中不需要粘貼復制呢?

解決方法

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

代碼:

復制代碼 代碼如下:
$connection =& new MySqlConnection($user, $password, $database); 

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

復制代碼 代碼如下:
$connection =& create_connection(); 

后者的代碼片斷集中在和數(shù)據(jù)庫連接的create_connect()工廠上 ,就像剛才說的一樣,使創(chuàng)造數(shù)據(jù)庫連接的過程成為一個簡單的操作―就像new操作一樣。工廠模式的優(yōu)點就在創(chuàng)建對象上。 它的任務就是把對象的創(chuàng)建過程都封裝起來,然后返回一個所需要的新類。

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

樣本代碼

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

我們發(fā)現(xiàn)下面代碼中,數(shù)據(jù)庫連接的那部分屢次出現(xiàn):

復制代碼 代碼如下:
// 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); 
//... 

//... 

為什么這樣做不好? 數(shù)據(jù)庫連接的參數(shù)出現(xiàn)的地方太多了,當你把這些參數(shù)設成常量,意味著你統(tǒng)一定義并對他們進行賦值,顯然這種做法不是很妥當:

你可以輕松地改變連接數(shù)據(jù)庫的參數(shù),但你不能增加或改變這些參數(shù)地順序,除非你把所有連接代碼都改了。
你不能輕松的實例化一個新類去連接另一種數(shù)據(jù)庫,比如說PostgresqlConnection。
這樣很難單獨測試和證實連接對象的狀態(tài)。
使用工廠設計模式,代碼將得到很大的改進:

復制代碼 代碼如下:
class Product { 
function getList() { 
$db =& $this->_getConnection(); 
//... 

function &_getConnection() { 
return new MysqlConnection(DB_USER, DB_PW, DB_NAME); 


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

php技術介紹php設計模式中的工廠模式,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 乌兰察布市| 客服| 三都| 杭州市| 碌曲县| 承德县| 密山市| 望城县| 福鼎市| 伊宁市| 昭苏县| 怀仁县| 哈尔滨市| 南宁市| 湄潭县| 贡山| 清苑县| 崇明县| 邵东县| 水富县| 峨眉山市| 澎湖县| 巴中市| 泗水县| 怀安县| 白沙| 梅州市| 和田市| 黎川县| 星座| 无棣县| 土默特左旗| 同仁县| 响水县| 专栏| 同德县| 都匀市| 云南省| 攀枝花市| 墨竹工卡县| 临海市|