百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> 一文读懂php设计模式之模板办法模式
分享文章到:

一文读懂php设计模式之模板办法模式

发布时间:09/01 来源:未知 浏览: 关键词:
模板办法模式也是一种常用的设计模式,它属于行动性设计模式。它的定义是:在一个办法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板办法使得子类可以在不改动算法构造的状况下,从新定义算法中的某些步骤。

场景

一样周末早上起来比力晚,就不会出去买早点吃,大概就会泡一桶利便面或酸辣粉或淮南牛肉汤。泡利便面或酸辣粉的步骤是一样的,第一需要预备开水,然后用开水泡利便面或酸辣粉,接下来参加本人的调料包,最后泡上2~3分钟就行了。这中心有两个步骤完全一致(预备开水、泡2~3分钟)、有两个步骤相似(泡食材、参加各自调料包)。

关于上面的场景,我们可以定义一个泡利便面或酸辣粉的算法。这个算法非常简便,4个步骤

  • 预备开水

  • 泡食材(利便面或酸辣粉)

  • 加调料(利便面、酸辣粉有本人的调料包)

  • 在开水中浸泡2~3分钟

此刻,我们用模板办法模式来完成上述需求。

第一,定义一个抽象类,抽象类里定义详细的算法,乃至各个步骤。

abstract class Breakfast
{
    final public function prepare () {
        $this->boilWater();
        $this->brew();
        $this->addSeasoning();  
        $this->wait();
    }
    
    public function boilWater ()
    {
        echo '预备开水' . PHP_EOL;
    }
    
    // 泡食材
    abstract public function brew ();
    
    // 加调料
    abstract public function addSeasoning ();
    
    public function wait ()
    {
        echo '等候2~3分钟' . PHP_EOL;
    }
}

prepare办法里就是详细的算法,给这个办法加上final是防止该办法被重写。别的,你可以看到这里面有两个抽象办法,需要后代去自行完成。

接下来,我们来完成利便面及酸辣粉的类。这两个类需继承Breakfast,然后完成抽象办法。

class Noodle extends Breakfast
{
    public function brew ()
    {
        echo '参加利便面' . PHP_EOL;
    }
    public function addSeasoning ()
    {
        echo '参加利便面的调料包' . PHP_EOL;
    }
}

class Powder extends Breakfast
{
    public function brew ()
    {
        echo '参加酸辣粉' . PHP_EOL;
    }
    public function addSeasoning ()
    {
        echo '参加酸辣粉的调料包' . PHP_EOL;
    }
}

上述的例子就是一个典型的模板办法模式,父类里定义算法骨架,子类完成算法中的一些步骤。

钩子

上述的例子,表现了模板办法模式中一个常用处景:复用。除了复用外,模板办法模式还是一个重要的利用——扩展。

模板办法模式是通过钩子来实现扩展的。钩子是一种声明在抽象类中的办法,但只要空的或默许的实现。钩子的存在,让子类有能力对算法不一样点停止挂钩。要不要挂钩,由子类本人决议。

下面我们连续通过例子来讲解钩子的使用,一样我吃泡面的时候,会加火腿或鸡蛋。加火腿和鸡蛋这个是不肯定的,所以我们可以钩子,让子类本人决议要不要加火腿或鸡蛋。

修改Breakfast.php

abstract class Breakfast
{
    final public function prepare () {
        $this->boilWater();
        $this->brew();
        $this->addSeasoning();
        $this->hook();
        $this->wait();
    }
    
    
    // 省略部分办法
    
    
    // 默许不做任何事情
    public function hook () :void
    {}
}

修改Noodle.php,重写hook办法

public function hook(): void
{
    echo '参加火腿和鸡蛋' . PHP_EOL;
}

模板办法模式与回调函数

php中有很多的函数用了相似模板办法模式或战略模式的思想,比方sort()函数,它封装了排序的算法,但是详细的排序规则,由回调函数去完成。通过回调函数就不消去创立抽象类乃至子类了,大大的减少了代码量。

模板办法模式与工厂办法模式、战略模式的关系

工厂办法模式时模板办法模式一个非凡的情势。

模板办法基于继承机制: 它同意你通过扩展子类中的部分内容来改动部分算法。

战略模式基于组合机制: 你可以通过对响应行动供给不一样的战略来改动对象的部分行动。

模板办法在类层次上运作, 因此它是静态的。 战略在对象层次上运作, 因此同意在运转时切换行动。

以上就是一文读懂php设计模式之模板办法模式的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有152人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板