欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

學習php設(shè)計模式 php實現(xiàn)模板方法模式

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

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

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

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

每個抽象模板可以有多個具體模板與之對應,而每個具體模板有其自己對抽象方法(也就是頂層邏輯的組成部分)的實現(xiàn),從而使得頂層邏輯的實現(xiàn)各不相同。
四、模板方法模式適用場景
1、一次性實現(xiàn)一個算法的不變的部分,并將可變的行為留給子類來實現(xiàn)。
2、各子類中公共的行為應被提取出來并集中到一個公共父類中以避免代碼重復。
3、控制子類擴展。
五、模板方法模式與其它模式
1、策略模式(strategy模式):模板方法使用繼承來改變算法的部分,策略模式使用委托來改變整個算法。區(qū)別在于封閉的變化不同,一個變化的部分,一個變化的是整體。
2、工廠方法模式(factory method模式):Factory Method模式常被模板方法調(diào)用。
六、模板方法模式PHP示例

<?php
/**
 * 抽象模板角色
 * 定義抽象方法作為頂層邏輯的組成部分,由子類實現(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();
}
 
/**
 * 具體模板角色
 * 實現(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();
?>

七、模板方法模式
模板方法是一種代碼復用的基本技術(shù),模板方法導致一種反射的控制結(jié)構(gòu),這指的是一個父類調(diào)用子類的操作。
其實現(xiàn)過程:準備一個抽象類,將部分邏輯以具體方法以及具體構(gòu)造子的形式實現(xiàn),然后聲明一些抽象方法來迫使子類實現(xiàn)剩余的邏輯。不同子類可以以不同的方式實現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實現(xiàn)。
八、重構(gòu)的原則
重構(gòu)時應當遵守的原則是:將行為以是移到結(jié)構(gòu)的高端,而將狀態(tài)盡量移動到結(jié)構(gòu)的低端。
1、應當要所行為而不是狀態(tài)定義一個類。
2、在實現(xiàn)行為是,是用抽象狀態(tài)而不是用具體狀態(tài)。
3、給操作劃分層次。
4、將狀態(tài)的確認推遲到子類中。在父類中,如果需要狀態(tài)屬性的話,可以調(diào)用抽象的取值方法,而將抽象的取值方法的實現(xiàn)放到具體子類中。
如果可以遵守以上的而,那么就可以在等級結(jié)構(gòu)中將接口與實現(xiàn)分離,將抽象與具體分離,從而保證代碼可以最大限度的被復用。

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

相關(guān)文章

  • php下mysql數(shù)據(jù)庫操作類(改自discuz)

    php下mysql數(shù)據(jù)庫操作類(改自discuz)

    這是php mysql的數(shù)據(jù)庫操作類,取自discuz,經(jīng)過修改后可以用于其它程序了,并且有足夠的注釋,大家可以借鑒研究下.
    2010-07-07
  • php使用cookie保存登錄用戶名的方法

    php使用cookie保存登錄用戶名的方法

    這篇文章主要介紹了php使用cookie保存登錄用戶名的方法,包括提交頁面及設(shè)置cookie的方法,需要的朋友可以參考下
    2015-01-01
  • PHP面向?qū)ο蟪绦蛟O(shè)計之接口的繼承定義與用法詳解

    PHP面向?qū)ο蟪绦蛟O(shè)計之接口的繼承定義與用法詳解

    這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計之接口的繼承定義與用法,結(jié)合實例形式分析了php接口的概念、定義、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-12-12
  • PHP實現(xiàn)將多個文件中的內(nèi)容合并為新文件的方法示例

    PHP實現(xiàn)將多個文件中的內(nèi)容合并為新文件的方法示例

    這篇文章主要介紹了PHP實現(xiàn)將多個文件中的內(nèi)容合并為新文件的方法,涉及php編碼轉(zhuǎn)換、文件與目錄的遍歷以及文件讀寫相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • PHP基于遞歸實現(xiàn)的約瑟夫環(huán)算法示例

    PHP基于遞歸實現(xiàn)的約瑟夫環(huán)算法示例

    這篇文章主要介紹了PHP基于遞歸實現(xiàn)的約瑟夫環(huán)算法,結(jié)合實例形式較為詳細的分析了約瑟夫環(huán)問題與php使用遞歸算法的解決方法,需要的朋友可以參考下
    2017-08-08
  • PHP form 表單傳參明細研究

    PHP form 表單傳參明細研究

    最近一段時間一直在做基于uchome的二次開發(fā)網(wǎng)站,因uchome中的很多跳轉(zhuǎn)都是通過參數(shù)do來控制的,一直對這種機制不是十分的明細,總有一種霧里看花的感覺。
    2009-07-07
  • PHP5.6新增加的可變函數(shù)參數(shù)用法分析

    PHP5.6新增加的可變函數(shù)參數(shù)用法分析

    這篇文章主要介紹了PHP5.6新增加的可變函數(shù)參數(shù)用法,結(jié)合具體實例形式分析了PHP5.6可變函數(shù)參數(shù)的具體用法與相關(guān)注意事項,需要的朋友可以參考下
    2017-08-08
  • 最新評論