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

简介:

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

适用场景:

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

优点:

  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使用GIFEncoder类处理gif图片实例

    下面是“PHP使用GIFEncoder类处理gif图片实例”的完整攻略: 1. 简介 GIFEncoder类是一个用于将多张图片合成GIF动画图的PHP类库。 它具有压缩比高、动画流畅等优点,并且易于使用。在使用过程中,你需要了解一些基本的PHP和GIF编码知识。 2. 安装 GIFEncoder类可以免费从 GitHub 上下载。下载后,你需要把class…

    PHP 2023年5月23日
    00
  • ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解

    下面是关于“ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解”的完整攻略: 什么是扫码支付模式二 扫码支付模式二是微信支付的一种支付方式,由商户生成支付二维码,用户用微信扫描二维码后完成支付。 ThinkPHP框架整合微信支付之Native 扫码支付模式二 第一步:安装微信支付SDK composer require "the…

    PHP 2023年5月23日
    00
  • 微信小程序彻底拯救16GB手机 微信小程序与手机APP占用内存/流量消耗对比介绍

    微信小程序彻底拯救16GB手机 1. 微信小程序与手机APP占用内存/流量消耗对比介绍 插入表格 应用 占用内存 占用流量 微信 134.3MB 14.68MB 微信小程序 20.6MB 2.12MB 淘宝 295.3MB 88.54MB 淘宝Lite 71.6MB 4.25MB 从表格可以看出,相同功能的微信小程序在占用内存和流量方面都远远小于对应的手机A…

    PHP 2023年5月23日
    00
  • PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】

    让我来详细讲解如何用PHP实现绘制二叉树图形显示功能的完整攻略。在这个过程中,我将给出两个示例说明。 一、概述 在现代化的计算机科学算法中,二叉树在很多领域得到了广泛应用,比如搜索树、平衡树和红黑树等。在进行这些算法的实现时,我们通常需要对二叉树进行可视化展示,方便我们更好地理解和调试代码。本文将要介绍如何使用PHP来实现绘制二叉树图形显示功能。 二、绘制二…

    PHP 2023年5月26日
    00
  • PHP多线程批量采集下载美女图片的实现代码(续)

    下面是讲解“PHP多线程批量采集下载美女图片的实现代码(续)”攻略的完整步骤: 一、前置准备首先我们需要安装扩展,安装php-amqp扩展,这个扩展是使用RabbitMQ必备的,安装方式在官方仓库和pecl都有,我一般使用pecl安装,使用命令“sudo pecl install amqp”,然后在php.ini中添加引入即可。 二、创建消息队列通过Rabb…

    PHP 2023年5月27日
    00
  • php生成WAP页面

    下面我将详细介绍如何用 PHP 生成 WAP 页面的完整攻略。 什么是 WAP 页面 WAP(无线应用协议)页面是一种专门为移动设备设计的网页,由于移动设备的屏幕较小,因此 WAP 页面通常都需要进行特殊的设计和适配。 生成 WAP 页面的步骤 生成 WAP 页面的步骤如下: 创建一个 PHP 文件,例如 index.php。 在 PHP 文件中编写 HTM…

    PHP 2023年5月30日
    00
  • Smarty模板语法详解

    Smarty是一种用来分离应用程序中业务逻辑和表现层的模板引擎。具有易于学习和使用、良好的性能等特点,已经成为PHP开发中最为流行的模板引擎之一。在本文中,我们将对Smarty模板语法进行详细的讲解。 1. Smarty模板语法基础 1.1 变量输出 在Smarty模板中,使用变量时需要使用{$variable}的形式进行输出。例如,我们可以使用以下代码输出…

    PHP 2023年5月26日
    00
  • 微信小程序中setInterval的使用方法

    当我们需要在微信小程序中定时执行某些任务的时候,可以使用setInterval函数。下面将详细介绍setInterval函数的使用方法和应用场景。 什么是setInterval setInterval是JavaScript语言提供的一个函数,用于定期调用指定的函数,重复执行该函数,直到 clearInterval() 被调用或者程序关闭。setInterva…

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