搜索

查看: 3215|回复: 11

[PHP] PHP设计模式之模板方法模式Template Method Pattern详解

[复制链接]
发表于 2023-5-4 17:06:09 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:06:09 3215 11 看全部
目录
  • 简介
  • 适用场景
  • 优点
  • 缺点
  • 其它
  • 代码
    简介
    模板方法模式,是行为型的设计模式。
    定义一个操作中的算法的骨架,而将一些步骤延迟到子类当中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
    通俗讲,模板方法模式是偏向继承的设计模式,当子类有重复的动作时候,可将他们提取出来,放在父类进行处理。

    适用场景
    算法结构相同但是算法不同的场景下使用,父类控制整体,子类具体实现。

    优点
    体现了继承的优点,实例化子类,子类继承的是父类的模板方法,可以实现统一格式的算法调用,并避免重复。
    方便实现钩子函数。
    用户只需要实现子类的部分逻辑,实例化父类就可以完成功能。
    符合开闭原则。
    方便扩展。

    缺点
    受到父类约束,继承让耦合度变大,某些场景下会有局限性。

    其它
    相比较与策略模式相似。
    但是模板方法的定位是父类控制整体,子类具体实现。为了优雅的扩展代码而生。
    策略模式的定位是根据情况选定合适的算法。

    代码
    //抽象出来一个下载类
    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模板方法模式内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛!
  • 发表于 2023-6-28 17:07:46 | 显示全部楼层
    麻辣鸡翅 2023-6-28 17:07:46 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    发表于 2023-6-28 19:10:32 | 显示全部楼层
    胡37 2023-6-28 19:10:32 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-28 21:02:55 | 显示全部楼层
    老橡树1 2023-6-28 21:02:55 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    发表于 2023-6-28 21:36:05 | 显示全部楼层
    风吹吹蛋蛋疼风w 2023-6-28 21:36:05 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-29 12:03:44 | 显示全部楼层
    惜颜705 2023-6-29 12:03:44 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-29 13:37:28 | 显示全部楼层
    123456833 2023-6-29 13:37:28 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    发表于 2023-6-30 13:38:15 | 显示全部楼层
    Gordon520 2023-6-30 13:38:15 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    发表于 2023-6-30 14:13:34 | 显示全部楼层
    知足常乐77 2023-6-30 14:13:34 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    发表于 2023-6-30 16:46:01 | 显示全部楼层
    心随674 2023-6-30 16:46:01 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    • 您可能感兴趣
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| 小黑屋| 知鸟论坛 |网站地图
    本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表