首页 > 编程语言 >浅谈PHP设计模式的模板方法模式

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

时间:2022-11-10 21:02:12浏览次数:37  
标签:function singer PHP 浅谈 子类 父类 protected 设计模式

简介:

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

适用场景:

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

优点:

  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();

标签:function,singer,PHP,浅谈,子类,父类,protected,设计模式
From: https://www.cnblogs.com/phpphp/p/16878748.html

相关文章

  • 设计模式学习(九):装饰器模式
    设计模式学习(九):装饰器模式作者:Grey原文地址:博客园:设计模式学习(九):装饰器模式CSDN:设计模式学习(九):装饰器模式装饰器模式装饰器模式是一种结构型模式。顾名思义,就是对某......
  • 浅谈PHP设计模式的原型模式
    简介:原型模式,属于创建型模式的一种。主要针对对象进行克隆,把被克隆的对象称之为原型,原型模式称之为克隆模式也许更为贴切。用原型实例指定创建对象的种类,并且通过拷贝这......
  • 浅谈网站改版从那几方面着手之北京博奥智源
    网站改版首页:结合国办相关文件要求,从各个栏目挑选重点内容展示在首页上,并优化各个板块的排版。对首页各个模块的摆放位置和布局重新进行规划,突出展示重点内容,同时......
  • 设计模式-单例模式(最全总结)
    单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。饿汉式单例模式在类加载的时候就马上初始化了,此时还没到运行时只是将......
  • 图解23种设计模式
    一、单一职责原则就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职......
  • 设计模式学习(八):桥接模式
    设计模式学习(八):桥接模式作者:Grey原文地址:博客园:设计模式学习(八):桥接模式CSDN:设计模式学习(八):桥接模式桥接模式桥接模式是一种结构型模式。它将抽象部分和实现部分分离,......
  • java 单例设计模式 懒汉式
    packagecom.tedu.test;/***单例设计模式懒汉式设计*优点:不会造成资源的浪费*缺点:会造成线程安全问题*/publicclasssingleonDemo{publicstatic......
  • java单例设计模式 饿汉式
    packagecom.tedu.test;/***单例设计模式的实现饿汉式*缺点:比较浪费资源*优点:饿汉式实现方式不会存在线程安全问题*单例设计模式的原则:实例唯一*/publi......
  • 浅谈内存缓存和硬盘缓存
    内存缓存(frommemorycache)和硬盘缓存(fromdiskcache)内存缓存(frommemorycache):内存缓存具有两个特点,分别是快速读取和时效性:1、快速读取:内存缓存会将编译解析后......
  • 浅谈性能优化之图片压缩、加载和格式选择
    原文链接:浅谈性能优化之图片压缩、加载和格式选择在认识图片优化前,我们先了解下【二进制位数】与【色彩呈现】的关系。二进制位数与色彩在计算机中,一般用二进制数来......