可能一直都以為設(shè)計(jì)模式只是為Java架構(gòu)師準(zhǔn)備的,實(shí)際上,設(shè)計(jì)模式對于每個(gè)人都非常有用。為什么說它們在PHP應(yīng)用程序中也非常有用?
接下來讓我來解釋這些問題。
設(shè)計(jì)模式不僅代表著更快開發(fā)健壯軟件的有用方法,而且還提供了以友好的術(shù)語封裝大型理念的方法。用較小的示例展示設(shè)計(jì)模式的價(jià)值與功用是非常困難的。這往往有些大材小用的意味,因?yàn)槟J綄?shí)際上是在大型代碼庫中發(fā)揮作用的。
既然已經(jīng)了解了設(shè)計(jì)模式以及它們的有用之處,現(xiàn)在我們來看看PHP5的幾種常用模式。
一、工廠模式(Factory Pattern)
工廠模式主要是為創(chuàng)建對象提供過渡接口,以便將創(chuàng)建對象的具體過程屏蔽隔離起來,達(dá)到提高靈活性的目的。(JAVA中工廠模式分為:簡單工廠模式、工廠方法模式、抽象工廠模式)
工廠就是負(fù)責(zé)生成對象的類或方法。工廠模式解決了當(dāng)代碼關(guān)注于抽象類型時(shí)如何創(chuàng)建對象實(shí)例的問題。
在最初的設(shè)計(jì)模式一書中,許多設(shè)計(jì)模式都鼓勵(lì)使用松散耦合。如何理解這個(gè)概念?在項(xiàng)目開發(fā)中更改一個(gè)代碼片段時(shí),就會(huì)發(fā)生問 題,而且往往認(rèn)為完全不相關(guān)的部分也可能出現(xiàn)級(jí)聯(lián)破壞。該問題在于緊密耦合。如果類之間有非常強(qiáng)的依賴性,那么這樣的系統(tǒng)就很難維護(hù),因?yàn)橄到y(tǒng)里的一個(gè)改 動(dòng)會(huì)引起一連串的相關(guān)改動(dòng)。所以我們需要一組模式使這些類之間能夠相互通信,但不希望它們緊密綁定在一起,以避免出現(xiàn)聯(lián)鎖反應(yīng)(嚴(yán)格意義上講是叫解耦)。
在大型系統(tǒng)中,許多代碼依賴于少數(shù)幾個(gè)關(guān)鍵類。需要更改這些類時(shí),可能會(huì)出現(xiàn)困難。例如,假設(shè)您有一個(gè)從文件讀取的User類,您希望將其更改為從數(shù)據(jù)庫讀取的其他類,但是,所有的代碼都引用從文件讀取的原始類,這時(shí)候,使用工廠模式會(huì)很方便。
舉例說明:
<?php
abstract class IUser { //抽象產(chǎn)品角色
abstract function getName();
}
class User extends IUser { //具體產(chǎn)品角色
public function getName() {
return 'Jack';
}
}
class UserFactory { //工廠類角色
static public function create() {
return new User(); //返回實(shí)例
}
}
$uo = UserFactory::create();
echo $uo->getName();
?>
在簡單工廠模式中,一個(gè)工廠類處于對產(chǎn)品實(shí)例化調(diào)用的中心位置上,它決定哪一個(gè)產(chǎn)品類應(yīng)當(dāng)被實(shí)例化,如同一個(gè)交通警察站在來往的車輛流中,決定放行哪一個(gè)方向的車輛前行。
工廠模式的三種角色:
1.工廠角色(Creator):這是本模式的核心,它負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯。工廠類可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對象。
2.抽象產(chǎn)品角色(Product):工廠模式所創(chuàng)建的所有對象的父類。它負(fù)責(zé)描述所有實(shí)例所共有的公共接口。(一般由接口或抽象類來實(shí)現(xiàn))。
3.具體產(chǎn)品角色(Concrete Product):是工廠模式創(chuàng)建的目標(biāo),所有創(chuàng)建的對象都是充當(dāng)這個(gè)角色的某個(gè)具體類的實(shí)例。(由一個(gè)具體類實(shí)現(xiàn))
工廠模式的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
1. 簡單實(shí)用
2. 利于軟件體系結(jié)構(gòu)優(yōu)化
缺點(diǎn):
1. 違反高內(nèi)聚責(zé)任分配原則
2. 模塊功能容易蔓延,不利于系統(tǒng)維護(hù)
有時(shí)此類模式在規(guī)模較小的環(huán)境中似乎有點(diǎn)大材小用,不過,最好還是學(xué)習(xí)這種扎實(shí)的編碼形式,以便應(yīng)用于任意規(guī)模的項(xiàng)目中。
如沒特殊注明,文章均為中技互聯(lián)原創(chuàng),轉(zhuǎn)載請注明來自www.tmsmall666.cn