《PHP應(yīng)用:學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)模板方法模式》要點(diǎn):
本文介紹了PHP應(yīng)用:學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)模板方法模式,希望對您有用。如果有疑問,可以聯(lián)系我們。
PHP教程一、意圖
定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中.Template Method 使得子類可以在不改變一個(gè)算法的結(jié)構(gòu)的情況下重定義該算法的某些特定的步驟【GOF95】
二、模板辦法模式結(jié)構(gòu)圖
PHP教程
PHP教程三、模板辦法模式中主要角色
抽象模板(AbstractClass)角色: 定義一個(gè)或多個(gè)抽象辦法讓子類實(shí)現(xiàn).這些抽象辦法叫做基本操作,它們是頂級邏輯的組成部分.
定義一個(gè)模板辦法.這個(gè)模板辦法一般是一個(gè)具體辦法,它給出頂級邏輯的骨架,而邏輯的組成步驟在對應(yīng)的抽象操作中,這些操作將會推遲到子類中實(shí)現(xiàn).同時(shí),頂層邏輯也可以調(diào)用具體的實(shí)現(xiàn)辦法
PHP教程具體模板(ConcrteClass)角色:實(shí)現(xiàn)父類的一個(gè)或多個(gè)抽象辦法,作為頂層邏輯的組成而存在.
PHP教程每個(gè)抽象模板可以有多個(gè)具體模板與之對應(yīng),而每個(gè)具體模板有其自己對抽象辦法(也就是頂層邏輯的組成部分)的實(shí)現(xiàn),從而使得頂層邏輯的實(shí)現(xiàn)各不相同.
四、模板辦法模式適用場景
1、一次性實(shí)現(xiàn)一個(gè)算法的不變的部分,并將可變的行為留給子類來實(shí)現(xiàn).
2、各子類中公共的行為應(yīng)被提取出來并集中到一個(gè)公共父類中以避免代碼重復(fù).
3、控制子類擴(kuò)展.
五、模板辦法模式與其它模式
1、策略模式(strategy模式):模板辦法使用繼承來改變算法的部分,策略模式使用委托來改變整個(gè)算法.區(qū)別在于封閉的變化不同,一個(gè)變化的部分,一個(gè)變化的是整體.
2、工廠辦法模式(factory method模式):Factory Method模式常被模板辦法調(diào)用.
六、模板辦法模式PHP示例
PHP教程
<?php
/**
* 抽象模板角色
* 定義抽象辦法作為頂層邏輯的組成部分,由子類實(shí)現(xiàn)
* 定義模板辦法作為頂層邏輯的架子,調(diào)用基本辦法組裝頂層邏輯
*/
abstract class AbstractClass {
/**
* 模板辦法 調(diào)用基本辦法組裝頂層邏輯
*/
public function templateMethod() {
echo 'templateMethod begin.<br />';
$this->primitiveOperation1();
$this->primitiveOperation2();
echo 'templateMethod end.<br />';
}
/**
* 基本辦法1
*/
abstract protected function primitiveOperation1();
/**
* 基本辦法2
*/
abstract protected function primitiveOperation2();
}
/**
* 具體模板角色
* 實(shí)現(xiàn)父類的抽象辦法
*/
class ConcreteClass extends AbstractClass{
/**
* 基本辦法1
*/
protected function primitiveOperation1() {
echo 'primitiveOperation1<br />';
}
/**
* 基本辦法2
*/
protected function primitiveOperation2(){
echo 'primitiveOperation2<br />';
}
}
/**
* 客戶端
*/
class Client {
/**
* Main program.
*/
public static function main() {
$class = new ConcreteClass();
$class->templateMethod();
}
}
Client::main();
?>
PHP教程七、模板辦法模式
模板辦法是一種代碼復(fù)用的基本技術(shù),模板辦法導(dǎo)致一種反射的控制結(jié)構(gòu),這指的是一個(gè)父類調(diào)用子類的操作.
其實(shí)現(xiàn)過程:準(zhǔn)備一個(gè)抽象類,將部分邏輯以具體辦法以及具體構(gòu)造子的形式實(shí)現(xiàn),然后聲明一些抽象辦法來迫使子類實(shí)現(xiàn)剩余的邏輯.不同子類可以以不同的方式實(shí)現(xiàn)這些抽象辦法,從而對剩余的邏輯有不同的實(shí)現(xiàn).
八、重構(gòu)的原則
重構(gòu)時(shí)應(yīng)當(dāng)遵守的原則是:將行為以是移到結(jié)構(gòu)的高端,而將狀態(tài)盡量移動到結(jié)構(gòu)的低端.
1、應(yīng)當(dāng)要所行為而不是狀態(tài)定義一個(gè)類.
2、在實(shí)現(xiàn)行為是,是用抽象狀態(tài)而不是用具體狀態(tài).
3、給操作劃分層次.
4、將狀態(tài)的確認(rèn)推遲到子類中.在父類中,如果需要狀態(tài)屬性的話,可以調(diào)用抽象的取值辦法,而將抽象的取值辦法的實(shí)現(xiàn)放到具體子類中.
如果可以遵守以上的而,那么就可以在等級結(jié)構(gòu)中將接口與實(shí)現(xiàn)分離,將抽象與具體分離,從而保證代碼可以最大限度的被復(fù)用.
PHP教程以上就是使用php實(shí)現(xiàn)模板辦法模式的代碼,還有一些關(guān)于模板辦法模式的概念區(qū)分,希望對大家的學(xué)習(xí)有所幫助.
《PHP應(yīng)用:學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)模板方法模式》是否對您有啟發(fā),歡迎查看更多與《PHP應(yīng)用:學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)模板方法模式》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/8285.html