您的位置:首頁技術文章
文章詳情頁

PHP設計模式之模板方法模式Template Method Pattern詳解

瀏覽:196日期:2022-06-06 10:58:07
目錄
  • 簡介
  • 適用場景
  • 優點
  • 缺點
  • 其它
  • 代碼

簡介

模板方法模式,是行為型的設計模式。

定義一個操作中的算法的骨架,而將一些步驟延遲到子類當中,使得子類可以不改變一個算法的結構即可重新定義該算法的某些特定步驟。

通俗講,模板方法模式是偏向繼承的設計模式,當子類有重復的動作時候,可將他們提取出來,放在父類進行處理。

適用場景

算法結構相同但是算法不同的場景下使用,父類控制整體,子類具體實現。

優點

體現了繼承的優點,實例化子類,子類繼承的是父類的模板方法,可以實現統一格式的算法調用,并避免重復。

方便實現鉤子函數。

用戶只需要實現子類的部分邏輯,實例化父類就可以完成功能。

符合開閉原則。

方便擴展。

缺點

受到父類約束,繼承讓耦合度變大,某些場景下會有局限性。

其它

相比較與策略模式相似。

但是模板方法的定位是父類控制整體,子類具體實現。為了優雅的擴展代碼而生。

策略模式的定位是根據情況選定合適的算法。

代碼

//抽象出來一個下載類
abstract class DownloadSongs {
    protected $singer;
    protected $operator;
    public function __construct($singer) {
$this->singer = $singer;
    }
    //前置鉤子
    protected function beforeDownloadHook() {
echo "充值" . $this->operator . "會員" . PHP_EOL;
    }
    //后置鉤子
    protected function afterDownloadHook() {
echo $this->operator . "還算好用,就是要充會員" . PHP_EOL;
    }
    //組合調用
    public function download() {
$this->beforeDownloadHook();
$this->downloadMusic();
$this->afterDownloadHook();
    }
    //具體實現讓子類進行
    abstract protected function downloadMusic();
}
//酷狗類,實現父類的兩個方法
class KuGouMusic extends DownloadSongs {
    protected $operator = "酷狗";
    protected function downloadMusic() {
echo "從酷狗音樂上下載" . $this->singer . "的歌曲" . PHP_EOL;
    }
}
//QQ類,實現父類的兩個方法
class QQMusic extends DownloadSongs {
    protected $operator = "QQ";
    protected function downloadMusic() {
echo "從QQ音樂上下載" . $this->singer . "的歌曲" . PHP_EOL;
    }
}
//調用端=======================================================================
(new KuGouMusic("鳳凰傳奇"))->download();
(new QQMusic("英文"))->download();

到此這篇關于PHP設計模式之模板方法模式Template Method Pattern詳解的文章就介紹到這了,更多相關PHP模板方法模式內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: PHP
国产综合久久一区二区三区