最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)模板方法模式

 更新時(shí)間:2015年12月08日 14:43:30   作者:胖胖  
這篇文章主要介紹了php設(shè)計(jì)模式中的模板方法模式,使用php實(shí)現(xiàn)模板方法模式,感興趣的小伙伴們可以參考一下

一、意圖
定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。Template Method 使得子類可以在不改變一個(gè)算法的結(jié)構(gòu)的情況下重定義該算法的某些特定的步驟【GOF95】
二、模板方法模式結(jié)構(gòu)圖

三、模板方法模式中主要角色
抽象模板(AbstractClass)角色: 定義一個(gè)或多個(gè)抽象方法讓子類實(shí)現(xiàn)。這些抽象方法叫做基本操作,它們是頂級(jí)邏輯的組成部分。
定義一個(gè)模板方法。這個(gè)模板方法一般是一個(gè)具體方法,它給出頂級(jí)邏輯的骨架,而邏輯的組成步驟在對(duì)應(yīng)的抽象操作中,這些操作將會(huì)推遲到子類中實(shí)現(xiàn)。同時(shí),頂層邏輯也可以調(diào)用具體的實(shí)現(xiàn)方法

具體模板(ConcrteClass)角色:實(shí)現(xiàn)父類的一個(gè)或多個(gè)抽象方法,作為頂層邏輯的組成而存在。

每個(gè)抽象模板可以有多個(gè)具體模板與之對(duì)應(yīng),而每個(gè)具體模板有其自己對(duì)抽象方法(也就是頂層邏輯的組成部分)的實(shí)現(xiàn),從而使得頂層邏輯的實(shí)現(xiàn)各不相同。
四、模板方法模式適用場(chǎng)景
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
/**
 * 抽象模板角色
 * 定義抽象方法作為頂層邏輯的組成部分,由子類實(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();
?>

七、模板方法模式
模板方法是一種代碼復(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)這些抽象方法,從而對(duì)剩余的邏輯有不同的實(shí)現(xiàn)。
八、重構(gòu)的原則
重構(gòu)時(shí)應(yīng)當(dāng)遵守的原則是:將行為以是移到結(jié)構(gòu)的高端,而將狀態(tài)盡量移動(dòng)到結(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)放到具體子類中。
如果可以遵守以上的而,那么就可以在等級(jí)結(jié)構(gòu)中將接口與實(shí)現(xiàn)分離,將抽象與具體分離,從而保證代碼可以最大限度的被復(fù)用。

以上就是使用php實(shí)現(xiàn)模板方法模式的代碼,還有一些關(guān)于模板方法模式的概念區(qū)分,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

最新評(píng)論

咸丰县| 甘泉县| 梅州市| 光泽县| 山阳县| 柳江县| 衡山县| 松阳县| 鞍山市| 泸溪县| 灵台县| 通州市| 岱山县| 长宁县| 崇信县| 治多县| 满城县| 淳安县| 石渠县| 威信县| 库尔勒市| 务川| 子洲县| 崇信县| 洞头县| 泸溪县| 霍城县| 阿坝县| 奉贤区| 扎鲁特旗| 苏尼特右旗| 璧山县| 甘孜县| 正宁县| 通江县| 青田县| 楚雄市| 吉安县| 玉龙| 伊宁市| 通榆县|