php設(shè)計模式之模板模式實例分析【星際爭霸游戲案例】
本文實例講述了php設(shè)計模式之模板模式。分享給大家供大家參考,具體如下:
星際中的蟲族部隊有個特別的進化兵種,就是飛龍,飛龍可以變成空中衛(wèi)士(天蟹)或者吞噬者(對空的)。另外還有口水兵可以進化變成地刺。
這三個變化過程都是類似的:變化的原部隊消失,產(chǎn)生一個蛋或繭,孵化一會兒,蛋消失,新的部隊產(chǎn)生。
如果我們把這三個進化獨立開,就會產(chǎn)生重復(fù)的代碼,冗余度增大了,所以我們要設(shè)法減少多余的代碼。
待解決的問題:要經(jīng)歷同樣的幾個步驟,只是每個步驟的細節(jié)會有不同。
思路:做一個進化工程的框架,我們只要控制細節(jié)就可以了。
模板模式模式示例:
<?php //進化的框架類,它是個抽象類 abstract class evolution { //框架方法,由它來實施各個步驟,用final禁止子類覆蓋 final public function process($troop) { //生成一個蛋,參數(shù)為進化的部隊 $egg = $this->becomeEgg($troop); //等待蛋孵化,參數(shù)為蛋 $this->waitEgg($egg); //孵化后產(chǎn)生新部隊 return $this->becomeNew($egg); } //下面三個抽象方法,由具體子類來實現(xiàn) abstract public function becomeEgg($troop); abstract public function waitEgg($egg); abstract public function becomeNew($egg); } //為了簡單說明,這里用空中衛(wèi)士(天蟹)的進化類來演示,地刺等的處理方法類似 //天蟹的進化類繼承抽象進化類 class GuardianEvolution extends evolution { //實現(xiàn)生成一個蛋 public function becomeEgg($troop) { //銷毀飛龍,返回一個蛋的對象的代碼 } //等待蛋孵化 public function waitEgg($troop) { //等待幾十秒鐘的代碼 } //孵化后產(chǎn)生新部隊 public function becomeNew(($troop) { //銷毀蛋,返回一個天蟹 } } //新建一個天蟹進化的對象 $e1 = new GuardianEvolution(); //讓它調(diào)用父類的進化框架函數(shù),自動完成三個步驟 $e1->process($sds);?>
用途總結(jié):模板模式可以將一系列的步驟自動化,同時又可以滿足不同的細節(jié)變化。
實現(xiàn)總結(jié):需要一個抽象類來包含框架函數(shù),讓具體的子類繼承它,并實現(xiàn)所有的步驟。使用的時候只要調(diào)用框架函數(shù)就自動完成了。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章:
1. 詳解Android studio 動態(tài)fragment的用法2. 基于android studio的layout的xml文件的創(chuàng)建方式3. 編程語言PHP在Web開發(fā)領(lǐng)域的優(yōu)勢在哪?4. 解決Android studio xml界面無法預(yù)覽問題5. 什么是python的自省6. Spring Boot和Thymeleaf整合結(jié)合JPA實現(xiàn)分頁效果(實例代碼)7. 圖文詳解vue中proto文件的函數(shù)調(diào)用8. Android如何加載Base64編碼格式圖片9. Springboot Druid 自定義加密數(shù)據(jù)庫密碼的幾種方案10. Vue封裝一個TodoList的案例與瀏覽器本地緩存的應(yīng)用實現(xiàn)

網(wǎng)公網(wǎng)安備