浅谈PHP设计模式的模板方法模式

yizhihongxing

简介:

模板方法模式,是行为型的设计模式。
定义一个操作中的算法的骨架,而将一些步骤延迟到子类当中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
通俗讲,模板方法模式是偏向继承的设计模式,当子类有重复的动作时候,可将他们提取出来,放在父类进行处理。

适用场景:

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

优点:

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

缺点:

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

其它:

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

代码

//抽象出来一个下载类
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();

原文链接:https://www.cnblogs.com/phpphp/p/16878748.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈PHP设计模式的模板方法模式 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • PHP多线程编程之管道通信实例分析

    针对“PHP多线程编程之管道通信实例分析”的完整攻略,我们可以分为以下几个部分进行讲解: 一、什么是多线程编程? 多线程编程是指在一个程序中同时创建并执行多个线程,实现多任务同时进行的效果。多线程编程可以提高程序的响应速度和资源利用率,使程序更加高效。 二、什么是管道通信? 管道通信是指在多线程程序中,通过创建管道实现线程之间的通信。通过管道,线程可以同时进…

    PHP 2023年5月27日
    00
  • 兼容PHP5的PHP目录管理函数库

    介绍PHP目录管理函数库的兼容性问题 PHP目录管理函数库通常用于文件的读写、复制、删除等操作。然而,该函数库在某些服务器上可能会因为PHP版本的问题而出现兼容性问题。为此,我们需要一套兼容PHP5的PHP目录管理函数库。 步骤一:确定PHP版本 在进行PHP目录管理函数库的使用前,首先要确定我们的服务器上安装的PHP版本是否是5或以上版本。若不满足,可以考…

    PHP 2023年5月23日
    00
  • PHP 字符串正则替换函数preg_replace使用说明

    PHP 字符串正则替换函数preg_replace使用说明 什么是preg_replace函数? PHP preg_replace函数是一种强大的字符串替换函数,它可以使用正则表达式来匹配需要替换的文本内容,并且进行替换操作。它的具体用法如下: preg_replace ( mixed $pattern , mixed $replacement , mixe…

    PHP 2023年5月26日
    00
  • 欢乐商城源码/品云购商城源码/英文版商城源码/全开源 可二开

    demo软件园每日更新资源,请看到最后就能获取你想要的: 1.欢乐商城源码/品云购商城源码/英文版商城源码/全开源 可二开 商城源码/英文版商城源码/全开源 可二开 出海项目源码 后台为中文语言 页面效果: 2.SQL学习指南(第2版) 这是一本关于SQL的书,不是关于数据库的。以MySQL为例来讲,不过对于SQL Server, Oracle等的不同也做了…

    PHP 2023年4月17日
    00
  • PHP sleep()函数, usleep()函数

    PHP sleep()函数和usleep()函数的用法 什么是sleep()函数和usleep()函数 PHP的sleep()函数可以暂停当前脚本执行一定的时间。而usleep()函数和sleep()的功能相似,不过他是以微秒为单位的等待时间。 sleep()函数的使用方法 PHP中sleep()函数的语法: sleep(seconds) 其中seconds…

    PHP 2023年5月23日
    00
  • phpcms模块开发之swfupload的使用介绍

    下面就为您详细讲解”phpcms模块开发之swfupload的使用介绍”。 什么是swfupload? swfupload是一款使用Flash和JavaScript开发的多文件上传工具,可以上传多个文件,可以显示上传进程,在上传过程中可以使用自定义的事件来实现一些个性化的处理,广泛应用于各类网站的文件上传功能中。 如何在phpcms中使用swfupload?…

    PHP 2023年5月26日
    00
  • php中二分法查找算法实例分析

    下面是详细讲解“php中二分法查找算法实例分析”的完整攻略。 1. 什么是二分法查找算法? 二分法查找算法,也称为折半搜索算法、二分搜索算法、对数搜索算法,用于在一定范围内查找特定的元素,其核心思想是将待查找范围不断缩小为原来的一半。这个算法的执行效率很高,可以在大数据集中迅速查找到所需的元素。 2. 实现步骤 下面是该算法的具体实现步骤: 1.确定初始查找…

    PHP 2023年5月26日
    00
  • PHP实现即时输出、实时输出内容方法

    接下来我将为您详细讲解“PHP实现即时输出、实时输出内容方法”的完整攻略。 什么是即时输出和实时输出? 即时输出:即在执行PHP脚本时,脚本不会等到所有代码执行完成后再一次性输出,而是在脚本执行的过程中,随时将结果输出到浏览器端。 实时输出:即在执行长时间运行、需要输出的脚本时,脚本不会等到时间结束后一次性输出,而是在脚本执行的过程中,随时将结果输出到浏览器…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部