PHP设计模式之模板方法模式Template Method Pattern详解
发布:smiling 来源: PHP粉丝网 添加日期:2023-06-23 12:04:33 浏览: 评论:0
在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考虑今天的主角——模板方法模式。
模板方法模式,是行为型的设计模式。
定义一个操作中的算法的骨架,而将一些步骤延迟到子类当中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
通俗讲,模板方法模式是偏向继承的设计模式,当子类有重复的动作时候,可将他们提取出来,放在父类进行处理。
适用场景
算法结构相同但是算法不同的场景下使用,父类控制整体,子类具体实现。
优点
体现了继承的优点,实例化子类,子类继承的是父类的模板方法,可以实现统一格式的算法调用,并避免重复。
方便实现钩子函数。
用户只需要实现子类的部分逻辑,实例化父类就可以完成功能。
符合开闭原则。
方便扩展。
缺点
受到父类约束,继承让耦合度变大,某些场景下会有局限性。
其它
相比较与策略模式相似。
但是模板方法的定位是父类控制整体,子类具体实现。为了优雅的扩展代码而生。
策略模式的定位是根据情况选定合适的算法。
代码:
- //抽象出来一个下载类
- 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();
Tags: PHP设计模式 Template Method
- 上一篇:详解PHP设计模式之桥接模式
- 下一篇:最后一页
相关文章
- ·php设计模式是什么,该如何理解(2014-06-10)
- ·php设计模式 建造者模式 与Adapter(适配器模式)(2014-08-02)
- ·PHP设计模式之建造者模式定义与用法简单示例(2018-10-13)
- ·PHP设计模式之委托模式定义与用法简单示例(2018-10-13)
- ·PHP设计模式概述(2020-02-15)
- ·php设计模式之单例模式使用示例(2020-08-29)
- ·php设计模式之命令模式使用示例(2020-10-06)
- ·php基础设计模式大全(注册树模式、工厂模式、单列模式)(2021-06-16)
- ·PHP设计模式之简单投诉页面实例(2021-07-11)
- ·实例讲解PHP设计模式编程中的简单工厂模式(2021-07-12)
- ·PHP设计模式之工厂模式详解(2021-08-16)
- ·PHP设计模式之模板方法模式实例浅析(2021-11-02)
- ·PHP设计模式入门之迭代器模式原理与实现方法分析(2022-03-02)
- ·PHP设计模式入门之状态模式原理与实现方法分析(2022-03-02)
- ·深入分析PHP设计模式(2022-03-14)
- ·PHP设计模式之原型模式示例详解(2022-04-10)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)