你是否了解PHP設(shè)計(jì)模式
設(shè)計(jì)模式給我?guī)Я撕芏嗪锰?,在JAVA中有20多種的設(shè)計(jì)模式,而在PHP中也有五種常見(jiàn)的設(shè)計(jì)模式,下面我們就詳細(xì)的看看PHP設(shè)計(jì)模式中的工廠模式吧。PHP設(shè)計(jì)模式 一書將設(shè)計(jì)模式引入軟件社區(qū),該書的作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗稱 “四人幫”)。所介紹的設(shè)計(jì)模式背后的核心概念非常簡(jiǎn)單。
#T#經(jīng)過(guò)多年的軟件開(kāi)發(fā)實(shí)踐,Gamma 等人發(fā)現(xiàn)了某些具有固定設(shè)計(jì)的模式,就像建筑師設(shè)計(jì)房子和建筑物一樣,可以為浴室的位置或廚房的構(gòu)造方式開(kāi)發(fā)模板。使用這些模板或者說(shuō)設(shè)計(jì)模式意味著可以更快地設(shè)計(jì)更好的建筑物。同樣的概念也適用于軟件。設(shè)計(jì)模式不僅代表著更快開(kāi)發(fā)健壯軟件的有用方法,而且還提供了以友好的術(shù)語(yǔ)封裝大型理念的方法。例如,您可以說(shuō)您正在編寫一個(gè)提供松散耦合的消息傳遞系統(tǒng),也可以說(shuō)你正在編寫名稱為觀察者 的模式。
用較小的示例展示模式的價(jià)值是非常困難的。這往往有些大材小用的意味,因?yàn)槟J綄?shí)際上是在大型代碼庫(kù)中發(fā)揮作用的。本文不展示大型應(yīng)用程序,所以您需要思索的是在您自己的大型應(yīng)用程序中應(yīng)用示例原理的方法 —— 而不是本文演示的代碼本身。這不是說(shuō)您不應(yīng)該在小應(yīng)用程序中使用模式。很多良好的應(yīng)用程序都以小應(yīng)用程序?yàn)槠瘘c(diǎn),逐漸發(fā)展到大型應(yīng)用程序,所以沒(méi)有理由不以此類扎實(shí)的編碼實(shí)踐為基礎(chǔ)。
既然您已經(jīng)了解了PHP設(shè)計(jì)模式以及它們的有用之處,現(xiàn)在我們來(lái)看看 PHP V5 的五種常用模式。
工廠模式
最初在設(shè)計(jì)模式 一書中,許多設(shè)計(jì)模式都鼓勵(lì)使用松散耦合。要理解這個(gè)概念,讓我們最好談一下許多開(kāi)發(fā)人員從事大型系統(tǒng)的艱苦歷程。在更改一個(gè)代碼片段時(shí),就會(huì)發(fā)生問(wèn)題,系統(tǒng)其他部分 —— 您曾認(rèn)為完全不相關(guān)的部分中也有可能出現(xiàn)級(jí)聯(lián)破壞。
該問(wèn)題在于緊密耦合 。系統(tǒng)某個(gè)部分中的函數(shù)和類嚴(yán)重依賴于系統(tǒng)的其他部分中函數(shù)和類的行為和結(jié)構(gòu)。您需要一組模式,使這些類能夠相互通信,但不希望將它們緊密綁定在一起,以避免出現(xiàn)聯(lián)鎖。
在大型系統(tǒng)中,許多代碼依賴于少數(shù)幾個(gè)關(guān)鍵類。需要更改這些類時(shí),可能會(huì)出現(xiàn)困難。例如,假設(shè)您有一個(gè)從文件讀取的 User 類。您希望將其更改為從數(shù)據(jù)庫(kù)讀取的其他類,但是,所有的代碼都引用從文件讀取的原始類。這時(shí)候,使用工廠模式會(huì)很方便。
工廠模式 是一種類,它具有為您創(chuàng)建對(duì)象的某些方法。您可以使用工廠類創(chuàng)建對(duì)象,而不直接使用 new。這樣,如果您想要更改所創(chuàng)建的對(duì)象類型,只需更改該工廠即可。使用該工廠的所有代碼會(huì)自動(dòng)更改。
清單顯示工廠類的一個(gè)示列。等式的服務(wù)器端包括兩個(gè)部分:數(shù)據(jù)庫(kù)和一組 PHP 頁(yè)面,這些頁(yè)面允許您添加反饋、請(qǐng)求反饋列表并獲取與特定反饋相關(guān)的文章。
清單. Factory1.php
- <?php
- interface IUser
- {
- function getName();
- }
- class User implements IUser
- {
- public function __construct( $id ) { }
- public function getName()
- {
- return "Jack";
- }
- }
- class UserFactory
- {
- public static function Create( $id )
- {
- return new User( $id );
- }
- }
- $uo = UserFactory::Create( 1 );
- echo( $uo->getName()."\n" );
- ?>