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

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

 更新時間:2022年12月20日 15:06:09   作者:程序員-南  
在我們實際開發(fā)中,如果一個方法極其復雜時,如果我們將所有的邏輯寫在一個方法中,那維護起來就很困難,要替換某些步驟時都要重新寫,這樣代碼的擴展性就很差,當遇到這種情況就要考慮今天的主角——模板方法模式

簡介

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

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

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

適用場景

算法結(jié)構(gòu)相同但是算法不同的場景下使用,父類控制整體,子類具體實現(xiàn)。

優(yōu)點

體現(xiàn)了繼承的優(yōu)點,實例化子類,子類繼承的是父類的模板方法,可以實現(xiàn)統(tǒng)一格式的算法調(diào)用,并避免重復。

方便實現(xiàn)鉤子函數(shù)。

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

符合開閉原則。

方便擴展。

缺點

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

其它

相比較與策略模式相似。

但是模板方法的定位是父類控制整體,子類具體實現(xiàn)。為了優(yōu)雅的擴展代碼而生。

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

代碼

//抽象出來一個下載類
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;
    }
    //組合調(diào)用
    public function download() {
        $this->beforeDownloadHook();
        $this->downloadMusic();
        $this->afterDownloadHook();
    }
    //具體實現(xiàn)讓子類進行
    abstract protected function downloadMusic();
}
//酷狗類,實現(xiàn)父類的兩個方法
class KuGouMusic extends DownloadSongs {
    protected $operator = '酷狗';
    protected function downloadMusic() {
        echo '從酷狗音樂上下載' . $this->singer . '的歌曲' . PHP_EOL;
    }
}
//QQ類,實現(xiàn)父類的兩個方法
class QQMusic extends DownloadSongs {
    protected $operator = 'QQ';
    protected function downloadMusic() {
        echo '從QQ音樂上下載' . $this->singer . '的歌曲' . PHP_EOL;
    }
}
//調(diào)用端=======================================================================
(new KuGouMusic('鳳凰傳奇'))->download();
(new QQMusic('英文'))->download();

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

相關文章

最新評論

溆浦县| 涿鹿县| 承德县| 库尔勒市| 章丘市| 丽江市| 上蔡县| 北宁市| 太谷县| 伊宁市| 永平县| 瑞金市| 荆门市| 祥云县| 清徐县| 泗洪县| 平凉市| 凤城市| 霍邱县| 阿坝| 桐柏县| 宜川县| 和平区| 和龙市| 昌邑市| 休宁县| 庆云县| 白玉县| 葵青区| 绥棱县| 秦皇岛市| 陆丰市| 鄯善县| 德格县| 五华县| 东平县| 寻甸| 韩城市| 罗甸县| 醴陵市| 大同县|