浅谈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 删除数组元素

    删除数组元素是PHP常见的数组操作之一,可通过内置函数unset()来实现。 unset()函数 unset()函数用于删除指定数组元素,语法如下: unset($array[index]); 其中,$array表示要删除元素的数组,index表示要删除的元素的下标。 示例一: 下面的代码演示了如何使用unset()函数删除指定的数组元素: //创建数组 $…

    PHP 2023年5月26日
    00
  • PHP内部实现打乱字符串顺序函数str_shuffle的方法

    下面是关于”PHP内部实现打乱字符串顺序函数str_shuffle的方法”的完整攻略。 str_shuffle函数的作用 str_shuffle函数是PHP中的一个字符串函数,可以将字符串中的字符随机打乱顺序,返回打乱后的字符串。例如: $str = "Hello World"; echo str_shuffle($str); // 输出…

    PHP 2023年5月26日
    00
  • PHP实现的多彩标签效果代码分享

    下面是“PHP实现的多彩标签效果代码分享”的完整攻略: 1. 分析需求 在开始编写代码之前,我们需要先了解需求,这里的需求是实现一个多彩标签效果。该效果可以显示不同的标签类别,并且不同类别的标签具有不同的颜色。 2. 编写HTML代码 首先,我们需要先编写HTML代码,用于展示标签效果。HTML代码可参考如下: <div class="tag…

    PHP 2023年5月23日
    00
  • PHP PDO fetch 模式各种参数的输出结果一览

    好的。首先,我们需要了解什么是PDO以及它的fetch方法。PDO是PHP的一种数据库抽象层,提供了一种简单、统一的方式来访问各种数据库系统。而fetch则是PDO中的一个方法,用于执行一条语句并按照指定的方式获取结果集中的数据。 在fetch方法中,我们需要传递一个参数来指定获取数据的方式,这个参数也被称为“fetch模式”,常见的fetch模式有以下几种…

    PHP 2023年5月26日
    00
  • PHP数组实例详解

    PHP数组实例详解 什么是PHP数组 在PHP中,数组是一种特殊类型的变量,用于存储多个值。数组元素可以是任何类型的数据,如整数、字符串、浮点数、布尔值,甚至可以是数组本身。PHP数组用于存储有序的数据集合,这些集合的元素可以通过数字索引或是字符串键来访问。 在PHP中,数组分为以下两种类型: 索引数组:使用数字作为数组的键,可以通过下标来访问数组元素。 关…

    PHP 2023年5月23日
    00
  • 微信小程序 http请求封装详解及实例代码

    针对“微信小程序 http请求封装详解及实例代码”,我提供如下攻略: 1. http请求封装 在微信小程序中,我们可以使用 wx.request 方法进行网络请求。但是在实际开发中,我们可能会在多个地方用到网络请求,而每一次都写一遍请求代码不太方便,也容易出错。因此,我们可以将 http 请求进行封装,提高开发效率和代码可维护性。 1.1 封装方法 我们可以…

    PHP 2023年5月23日
    00
  • PHP中多维数组的foreach遍历示例

    下面是详细的攻略: 什么是多维数组 多维数组是指数组中包含有其他数组的数组,即数组的元素又是一个数组。 例如:$arr = array( array(‘name’=>’张三’, ‘age’=>20), array(‘name’=>’李四’, ‘age’=>22), array(‘name’=>’王五’, ‘age’=>25…

    PHP 2023年5月27日
    00
  • 五种单件模式之Singleton的实现方法详解

    五种单件模式之Singleton的实现方法详解 什么是单例模式? 单例模式是一种常用的设计模式之一,它的目的在于保证一个类仅有一个实例,并提供一个访问该实例的全局访问点。 Singleton模式的实现方法 方法一:懒汉式 在第一次调用getInstance()方法时,才会创建实例进行初始化。 示例代码: class Singleton { private s…

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