首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP设计模式——模板方法

方法中定义算法的框架,将某些步骤推迟到子类。模板方法(Template Method)可让子类在不更改算法结构的情况下重新定义算法的某些步骤。 管理公司员工的日常行程可能是一项耗时的工作。...如果可以在超类中定义一些通用的方法,但仍然给子类提供灵活地可以定义子类自身的功能,那么显然可以做得更好。而这就需要应用到模板方法(Template Method)模式了。...在我们的示例中,我们在方法(Employee类中的workRoutine()方法)中定义算法的框架,将某些步骤(doWork())推迟到子类(Programmer和Marketer类)中。...模板方法(Employee类中的doWork()方法)使子类(Programer和Marketer类)重新定义算法的某些步骤(doWork()),而无需更改算法的结构。

2.1K10

PHP设计模式模板方法模式

PHP设计模式模板方法模式 模板方法模式,也是我们经常会在不经意间有会用到的模式之一。这个模式是对继承的最好诠释。...当子类中有重复的动作时,将他们提取出来,放在父类中进行统一的处理,这就是模板方法模式的最简单通俗的解释。就像我们平时做项目,每次的项目流程实都差不多,都有调研、开发、测试、部署上线等流程。...模板方法模式相信只要是做过一点面向对象开发的朋友都会多多少少使用过。...因为真的非常常见 一些框架中经常会有某些功能类有初始化的功能,在初始化的函数中都会调用很多内部的其他函数,这其实也是一种模板方法模式的应用 模板方法模式可以很方便的实现钩子函数。...比如某些博客开源程序会预留一些广告位或者特殊位置的钩子函数让使用者自己按需实现 模板方法模式适用于:一次性实现一个算法中不变的部分,并将可变的部分留给子类来实现;将子类中公共的行为提取出来并集中到父类中

1.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PHP设计模式模板方法模式实例浅析

    本文实例讲述了PHP设计模式模板方法模式。分享给大家供大家参考,具体如下: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。...模板方法模式中会用到抽象模板,它的方法分为两类: 基本方法,也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。...模板方法,可以有一个或多个,一般是一个具体方法,也就是一个框架,实现基本方法的调度,完成固定逻辑。 注意: 为了防止恶意的操作,一般模板方法都加上final关键字,不允许被覆写。...模板方法模式的优点 封装不变部分,扩展可变部分。 提取公共部分代码,便于维护。 行为由父类控制,子类实现 示例: <?...php /** * 模型方法模式 */ abstract class ACar { abstract protected function start(); abstract protected

    59021

    php设计模式模板模式

    定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。...通俗点的理解就是 :完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。...以设计游戏为例,我们先定义游戏的大概框架,然后使各个不同的游戏来继承这个游戏框架,并实现框架中具体的方法 <?...php abstract class Game{ abstract function initialize(); abstract function startPlay(); abstract...function endPlay(); //定义模板 final public function play(){ //初始化游戏 $this->initialize

    2.2K40

    PHP设计模式模板方法模式定义与用法详解

    本文实例讲述了PHP设计模式模板方法模式定义与用法。...分享给大家供大家参考,具体如下: 什么是模板方法模式 模板方法(Template Method)设计模式中使用了一个类方法templateMethod(), 该方法是抽象类中的一个具体方法, 这个方法的作用是对抽象方法序列排序...,具体实现留给具体类来完成.关键在于模板方法模式定义了操作中算法的"骨架",而由具体类来实现....还有一点,可以使用模板方法模式控制子类扩展,也就是所谓的"钩子". 示例 在PHP编程中,可能经常会遇到一个问题: 要建立带图题的图像. 这个算法相当简单, 就是显示图像, 然后的图像下面显示文本....在模板方法设计模式中, 利用钩子可以将一个方法作为模板的一部分,不过不一定会用到这个方法, 换句话说, 它是方法的一部分,不过它包含一个钩子, 可以处理例外情况.

    33220

    模板方法模式

    我们希望不同的 实现能够遵守通用模式,保证它们使用了同一个算法,也是为了让代码更加易读。一旦你 从整体上理解了算法,就能更容易理解其各种实现。  ...模板方法模式是为这些情况设计的:整体算法的设计是一个抽象类,它有一系列抽象方法,代表算法中可被定制的步骤,同时这个类中包含了一些通用代码。...图1 使用模板方法模式描述申请贷款过程 CompanyLoanApplication 的checkIdentity 方法在Companies House 等注册公司数据库中查找相关信息。...图2 员工申请贷款是个人申请的一种特殊情况 使用Lambda 表达式和方法引用,我们能换个角度思考模板方法模式,实现方式也跟以前不一样...模板方法模式真正要做的是将一组方法调用按一定顺序组织起来。如果用函数接口表示函数,用Lambda 表达式或者方法引用实现这些接口,相比使用继承构建算法,就会得到极大的灵活性。

    714120

    模板方法模式.

    一、概念 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。...解析:模板方法模式用来创建一个算法的模板。什么是模板模板就是一个方法。更具体地说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。...,实现了抽象模板中定义为 abstract 的步骤方法,并可以自己选择是否重写钩子方法。...三、总结 模板方法模式的通用类图非常简单,仅仅使用了Java的继承机制,但它是一个非常广泛的模式。 优点:  1、封装不变部分,扩展可变部分。...为防止子类改变模板方法中的算法,可以将模板方法声明为 final。 策略模式模板方法模式都封装算法,但是策略模式使用的是组合,模板方法模式使用的是继承。 工厂方法模板方法的一种特殊版本。

    42210

    模板方法模式

    在微软的WebCast上, 李建中老师有个设计模式的系列讲座,其中在讲到模板方法(Template Method)曾说:如果你只想学习一种设计模式就学习模板方法吧。由此可见它使用的广泛性。 ...今天咱们就来一起学习模板方法模式。 那么,什么是模板方法模式呢?在解决这个问题前,咱们先来看看模板。...模板方法模式把我们不知道具体实现的步骤封装成抽象方法,提供一个按正确顺序调用它们的具体方法(这些具体方法统称为“模板方法”),这样构成一个抽象基类。...子类通过继承这个抽象基类去实现各个步骤的抽象方法,而工作流程却由父类控制。 2.模板方法模式定义及结构       模板方法模式属于行为模式的一种(GOF95)。...注意:模板方法模式中,迫使子类实现的抽象方法应该声明为protected abstract。 6. 模板方法和其他模式的联系 各个模式之间都有联系,模板方法也不例外,她并不是孤立存在的。

    62420

    模板方法模式

    模式中的角色### 1、 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。 2、 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。...总结### 1、模板方法模式是一种类的行为型模式,在它的结构图中只有类之间的继承关系,没有对象关联关系。...2、模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中。...3、在模板方法模式中,我们需要准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来让子类实现剩余的逻辑。...不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意。模板方法模式体现了面向对象的诸多重要思想,是一种使用频率较高的模式

    600110

    模板方法模式

    《大化设计模式》中的中文定义:模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法可使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。...模板方法模式的UML类图 模板方法模式的UML类图如下:(摘自《Head First Design Pattern AbstractClass是抽象类,定义并实现了一个模板方法。...模板方法模式的用途 当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的从层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。...烧好开水 冲泡咖啡豆 将饮料导入杯中 添加糖牛奶 模板方法模式和策略模式以及工厂方法模式的对比 模板方法模式和工厂方法模式都是让具体的实现放在子类中,但是工厂方法属于创建型模式,它提供了一种创建复杂对象的最佳方式...模板方法属于行为型模式,大致的步骤已经在基类中写好了,子类是对部分步骤的具体实现。 模板方法模式和策略模式都是封装算法。但是策略模式中的每个策略都是单独的一个类。可以随时去更改策略。

    40220

    模板方法模式

    模板方法模式属于行为类模式模板方法的组成 类图: 如图所示,模板方法模式主要由AbstractClass(抽象类)和ConcreteClass(具体子类)组成。...同时,在抽象类中实现了一个模板方法(Template Method),用于定义一个算法的框架,模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法...模式实现 模版方法模式由一个抽象类和一个(或一组)实现类通过继承结构组成,抽象类中的方法分为三种: 1)抽象方法:一个抽象方法由抽象类声明、由其具体子类实现。...对于模版方法模式来说,正是由于他们的主要逻辑相同,才使用了模版方法,假如不使用模版方法,任由这些相同的代码散乱的分布在不同的类中,维护起来是非常不方便的。 比较灵活。...其次, 在多个子类拥有相同的方法,并且这些方法逻辑相同时,可以考虑使用模版方法模式。在程序的主框架相同,细节不同的场合下,也比较适合使用这种模式

    66170

    模板方法模式

    前言 在上一篇文章责任链模式中提到了模板方法模式,因此这里简单介绍一下. 模板方法模式比较简单,或者说比较常用.在开发过程中,许多人在不知不觉的情况下就会使用,只要他具有良好的面对对象思维....比如当你写了Dog和Cat两个类,发现很多相同的代码,你自然就会将相同模块提取抽象成父类,然后将一些公共的方法放到父类中,这样子就基本实现了模板方式模式....介绍(摘自《Head FIrst 设计模式》) 在一个方法中定义一个算法的骨架,而将一些详细的步骤延迟到子类中. 模板方法使得子类可以在不改变算法结果的基础上,重新定义算法中的某些步骤. 类图 ?...角色 抽象模板: 抽象模板一般有一个具体实现的方法,用来定义算法的基础骨架.还有一些抽象方法留给子类去具体实现.此外还有一些有默认实现的钩子方法.子类可选实现....联系邮箱:huyanshi2580@gmail.com 更多学习笔记见个人博客——>呼延十 var gitment = new Gitment({ id: '[设计模式] 模板方法模式', //

    34130

    模板方法模式

    必定有钩子(没有实现的方法,需要子类去实现)和实现的方法。 定义 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。...模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。 线程池中的模板方法模式 ? AbstractExecutorService 中就有模板方法模式。...它实现了部分方法,也留下了钩子。 ? submit() 就是一个模板方法,它方法体里调用的父接口 Executor 的 execute() 方法其实并没有实现,而是交给子类去实现。...常见的模板方法模式 Spring 中 JdbcTemplate, 就是替我们封装了一套模板,我们在使用的时候只需要写 CRUD 就可以了,并不需要去释放资源和获取数据库链接。...感触 学了这个设计模式以后,瞬间想起以前自己想的代码,我去重构自己的代码了。模板方法模式使我们的代码干净,可读性好,代码重用性高。

    49620

    设计模式~模板方法模式

    模板方法模式是类的行为模式。 准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现, 然后声明一些抽象方法迫使子类实现剩余的逻辑。...不同的子类可以以不同的方式实现这些抽象方法, 从而对剩余的逻辑有不同的实现。这就是模板方法的用意。 模板方法模式的结构 ?...定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体的方法。...每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级路基的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。...好莱坞原则体现了模板模式的关键: 子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。

    46910
    领券