怎么在php中實現(xiàn)工廠方法模式?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站制作、成都網(wǎng)站設計、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務太和,十多年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220待解決的問題:雖然簡單工廠解決了動態(tài)返回不同類型對象的問題,但是實際情況當中,往往在新建一個對象的時候,需要做一些額外處理,比如制造機槍兵的時候需要判斷水晶礦是否大于50,而制造火焰兵的時候需要同時判斷水晶礦是否大于50和氣礦大于25,還有是否建造了研究院。如果把這些代碼全部放到工廠制造類里面,會使得制造類很臃腫,而且隨著工廠生產(chǎn)的對象的種類越來越多,工廠制造類的代碼會越來越難以維護。
思路:簡單工廠模式中的工廠類(兵種制造器的類)保持不變,增加一個制造接口,定義一個實際制造對象的方法,然后定義各個具體制造不同對象的工廠,同時要求這些工廠執(zhí)行這個制造接口,讓這些工廠去實現(xiàn)實際制造對象的方法。
工廠方法模式示例:
我們把機槍兵類和制造機槍兵的類的代碼放入一個文件,Marine.php,它的代碼如下:
50) { return new Marine(); } } } ?>
我們把火焰兵類和制造火焰兵的類的代碼放入一個文件,F(xiàn)irebat.php,它的代碼如下:
50 && $gas>25 && Academy>1) { return new Firebat(); } } } ?>
主文件中的內(nèi)容如下:
realCreate(); } } //新建一個兵種制造器對象 $creator = new BarracksCreator(); //靠接收參數(shù)制造一個火焰兵對象 $troop1 = $creator->create('Marine'); $troop1->attack(); //靠接收參數(shù)制造一個機槍兵對象 $troop2 = $creator->create('Firebat'); $troop2->attack(); ?>
用途總結(jié):工廠方法模式將新建對象的任務將給對應的具體工廠類,不必因為某些生產(chǎn)的對象需要進行額外處理而修改對外的主工廠。
實現(xiàn)總結(jié):需要接收參數(shù)的主工廠類,比如上面兵種制造器BarracksCreator,還需要聲明具體制造方法的一個接口,比如上面abstractCreator,然后定義具體生產(chǎn)各個產(chǎn)品的具體工廠類,每個具體工廠類必須執(zhí)行接口abstractCreator,這樣他們就必須實現(xiàn)制造對象的方法,比如上面的realCreate()。使用的時候只需要將參數(shù)傳遞給主工廠類工廠的生產(chǎn)方法create(),然后由create()根據(jù)參數(shù)生成具體工廠類的對象,并調(diào)用具體工廠類realCreate()獲取制造的產(chǎn)品對象并返回,對外界使用來說,只需調(diào)用主工廠類工廠進行生產(chǎn)。
說明:其實這篇文章內(nèi)的工廠方法模式和有些文章寫的不同,標準的工廠模式往往是用一個抽象類來代替上面的接口abstractCreator,然后讓所有的具體工廠類來繼承它,但使用的時候,由于抽象類不能實例化(新建它的對象),所以經(jīng)常是代碼中直接new FirebatCreator(),但是簡單工廠模式可以解決直接new的問題,所以我這里將簡單工廠模式和工廠方法模式一起使用,使這里的示例更加實用。同時由于PHP是單繼承,而執(zhí)行接口的數(shù)量是沒有限制的,所以使用接口abstractCreator更加靈活。
php,一個嵌套的縮寫名稱,是英文超級文本預處理語言(PHP:Hypertext Preprocessor)的縮寫。PHP 是一種 HTML 內(nèi)嵌式的語言,PHP與微軟的ASP頗有幾分相似,都是一種在服務器端執(zhí)行的嵌入HTML文檔的腳本語言,語言的風格有類似于C語言,現(xiàn)在被很多的網(wǎng)站編程人員廣泛的運用。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)網(wǎng)站建設公司,的支持。