资讯专栏INFORMATION COLUMN

我所理解的模板方法模式

Y3G / 2495人阅读

摘要:定义在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为模板方法模式参与角色抽象类抽象类不仅负责实现模板方法,还负责声明在模板方法中所使用到的抽象方法。

定义
在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为模板方法模式
参与角色

抽象类(AbstractClass)

抽象类不仅负责实现模板方法,还负责声明在模板方法中所使用到的抽象方法。

具体类(子类)

该角色负责具体实现抽象类角色中定义的抽象方法。这里实现的方法将会在抽象类角色的模板方法中被调用。

优点

封装不变部分,扩展可变部分

提取公共部分代码,便于维护

行为由父类控制,子类负责实现

使用场景

多个子类有共有方法,并且逻辑基本相同

重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现

重构时,模板方法是一个经常使用的方法,把相同的代码抽取到父类中,然后通过构造函数约束其行为

代码示例
# 抽象类  AbstractClass.php
operate1();
        $this->operate2();
    }

    /**
     * 操作1
     * @return mixed
     */
    abstract protected function operate1();

    /**
     * 操作2
     * @return mixed
     */
    abstract protected function operate2();

}
# 具体类1 ConcreteClassOne.php


# 具体类2  ConcreteClassTwo
           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29319.html

相关文章

  • 谈谈我所理解面向对象

    摘要:众多面向对象的编程思想虽不尽一致,但是无论哪种面向对象编程语言都具有以下的共通功能。原型编程以类为中心的传统面向对象编程,是以类为基础生成新对象。而原型模式的面向对象编程语言没有类这样一个概念。 什么是面向对象?这个问题往往会问到刚毕业的新手or实习生上,也是往往作为一个技术面试的开头题。在这里我们不去谈如何答(fu)好(yan)问(guo)题(qu),仅谈谈我所理解的面向对象。 从历...

    avwu 评论0 收藏0
  • 简述我所理解 PHP Trait

    摘要:和组合的语义定义了一种减少复杂性的方式,避免传统多继承和类相关典型问题。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短请求和相应的时间。同样的道理,根据引入不同的来完成对应的功能。 showImg(https://segmentfault.com/img/remote/1460000010868178); Trait 概念 在常规的 PHP 开发中,我们都习惯于先编写一...

    gecko23 评论0 收藏0
  • 我所理解正则表达式

    摘要:关于,新手理解起来可能比较困难,尤其是一些很牛逼的预查正则表达式。非贪婪与贪婪的问题贪婪出现在这种不确定数量的匹配中,所谓的贪婪,表示正则表达式在匹配的时候,尽可能多的匹配符合条件的内容。 学习了半年的正则表达式,也不能说一直学习吧,就是和它一直在打交道,如何用正则表达式解决自己的问题,并且还要考虑如何在匹配大量的文本时去优化它。慢慢的觉得正则已经成为自己的一项技能,逐渐的从一个正则表...

    _Zhao 评论0 收藏0
  • 我所理解正则表达式

    摘要:关于,新手理解起来可能比较困难,尤其是一些很牛逼的预查正则表达式。非贪婪与贪婪的问题贪婪出现在这种不确定数量的匹配中,所谓的贪婪,表示正则表达式在匹配的时候,尽可能多的匹配符合条件的内容。 学习了半年的正则表达式,也不能说一直学习吧,就是和它一直在打交道,如何用正则表达式解决自己的问题,并且还要考虑如何在匹配大量的文本时去优化它。慢慢的觉得正则已经成为自己的一项技能,逐渐的从一个正则表...

    K_B_Z 评论0 收藏0
  • 如何写一个微信小程序组件

    摘要:组件三要素组件的三要素就是小程序定义的三种文件因为本身就是模块化开发,所以这天然有利于组件化。日历组件所以利用和就可以打造一款组件了。这样就完成了一个组件编写,任何需要用到的地方都可以引入了。 背景 先谈下背景,在做一款产品的时候需要用到日期选择器,但是官方的却不太满足需求,因为无法选择农历啊。所以自己来造一个轮子好了,造轮子之前先想想啊,万一以后多个地方要用到,多个项目要用,怎么办呢...

    lijinke666 评论0 收藏0

发表评论

0条评论

Y3G

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<