星际中的虫族部队有个特别的进化兵种,就是飞龙,飞龙可以变成空中卫士(天蟹)或者吞噬者(对空的)。另外还有口水兵可以进化变成地刺。

这三个变化过程都是类似的:变化的原部队消失,产生一个蛋或茧,孵化一会儿,蛋消失,新的部队产生。

如果我们把这三个进化独立开,就会产生重复的代码,冗余度增大了,所以我们要设法减少多余的代码。

待解决的问题:要经历同样的几个步骤,只是每个步骤的细节会有不同。

思路:做一个进化工程的框架,我们只要控制细节就可以了。

模板模式模式示例:

//进化的框架类,它是个抽象类

abstract class evolution {

//框架方法,由它来实施各个步骤,用final禁止子类覆盖

final public function process($troop)

{

生成一个蛋,参数为进化的部队

$egg = $this->becomeEgg($troop);

等待蛋孵化,参数为蛋

$this->waitEgg($egg);

孵化后产生新部队

return $this->becomeNew($egg);

}

下面三个抽象方法,由具体子类来实现

abstract public function becomeEgg($troop);

abstract public function waitEgg($egg);

abstract public function becomeNew($egg);

}

为了简单说明,这里用空中卫士(天蟹)的进化类来演示,地刺等的处理方法类似

//天蟹的进化类继承抽象进化类

class GuardianEvolution extends evolution {

//实现生成一个蛋

public function becomeEgg($troop)

{

//销毁飞龙,返回一个蛋的对象的代码

}

//等待蛋孵化

public function waitEgg($troop)

{

//等待几十秒钟的代码

}

//孵化后产生新部队

public function becomeNew(($troop)

{

//销毁蛋,返回一个天蟹

}

}

//新建一个天蟹进化的对象

$e1 = new GuardianEvolution();

//让它调用父类的进化框架函数,自动完成三个步骤

$e1->process($sds);

?>

用途总结:模板模式可以将一系列的步骤自动化,同时又可以满足不同的细节变化。

实现总结:需要一个抽象类来包含框架函数,让具体的子类继承它,并实现所有的步骤。使用的时候只要调用框架函数就自动完成了。

模板模式 php,PHP设计模式5-模板模式相关推荐

  1. android常用的工厂模式,Android的设计模式-简单工厂模式

    前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中:java 1.定义 定义一个用于建立对象的接口,让子类决定实例化哪一个类.设计模式 2.介绍 简单工厂模式属于建立型模式. 简单工厂模 ...

  2. android 状态模式,Android编程设计模式之状态模式详解

    本文实例讲述了Android编程设计模式之状态模式.分享给大家供大家参考,具体如下: 一.介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但它们 ...

  3. 建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例

    本文实例讲述了PHP设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式: 将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1). 来点我人类能听懂的话: 1.在客户端看来需 ...

  4. 模式的模式:从设计模式到元模式

    最近的一两个月里,我一直在研究各类的模式:设计模式.架构模式.容器模式,以及其它一些特定领域的模式(如并行计算模式)等等. 经历了一番买书.读论文.读代码,我发现了以前对于模式的理解不够深刻.也因此呢 ...

  5. 设计模式之外观模式php,PHP设计模式:外观模式

    前言 菜鸟教程对外观模式的描述是:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口, ...

  6. python文件合法模式组合_python设计模式之组合模式

    最开始接触组合设计模式是在大话设计模式这本书中的案例,讲的是让你设计一个公司的组织架构,一个总公司下有人力资源部门,IT部门, 财务部门,还有广州分公司.深圳分公司,在分公司下也有IT部门和财务部门, ...

  7. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  8. java工厂模式 uml_深入浅出设计模式-简单工厂模式

    模式定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式定义了一个创建对象的类,由这个类来封装实例化 ...

  9. java并发编程:设计原则与模式_java编程设计模式一——策略模式

    定义: 策略模式定义了算法族,分别封装起来,让它们之间相互替代.此模式让算法的变化独立于使用算法的客户. 问题描述: 建立一个鸭子Duck的父类,它有很多子类,Duck都会游泳,但是有鸭子会飞,有的鸭 ...

最新文章

  1. PC问题-该虚拟机似乎正在使用中
  2. 量子计算机,开启中国速度
  3. C和指针之Eratosthenes-埃拉托斯特尼筛方法找质数
  4. REVERSE-PRACTICE-BUUCTF-14
  5. webkitlineclamp css3,-webkit-line-clamp
  6. JQuery基本获取值的方式
  7. C语言:将数组中的第一个数与最后一个数,第二个数与倒数第二个数依次完成镜像对调
  8. 线索二叉树(Binary Thread Tree)
  9. Atitit WatchService 使用和不能监控抓取到的解决 原因是生成速度太快,但处理速度慢,导致许多event 忽视了.. How to solu??? asyn to process
  10. linux 文本编辑器Vim/Vi详细介绍
  11. 微信支付H5完整版代码
  12. 分享好用的Mac系统的FTP工具和SHELL工具
  13. 干货|PMP项目管理计划汇总!
  14. 如何设计一张合格的日志表
  15. React脚手架安装
  16. [论文总结] 深度学习在农业领域应用论文笔记8
  17. php 新浪微博登陆,PHP使用新浪微博登入第三方网站实例代码
  18. 按键精灵制作自用游戏脚本所需的简单操作
  19. Unity3D动画帧事件
  20. The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone. You mu

热门文章

  1. DotNetNuke 5 User's Guide: Get Your Website Up and Running
  2. JS中的事件委托/事件代理详解
  3. 20165221 JAVA第四周学习心得
  4. php利用反射机制查找类和方法的所在位置
  5. [转]SQL Server 存储过程 一些常用用法(事物、异常捕捉、循环)
  6. 连接服务器用xshell还是linux,【linux☞5】xshell 连接服务器的简单介绍
  7. visual fortran常用数值算法集_资深游戏数值策划自白:数值不是你想象的那么简单!...
  8. Ubuntu18.04上AS运行模拟器报错:/dev/kvm device: permission denied
  9. [RK3288][Android6.0] StageFright解码流程小结
  10. Ubuntu 14.04报错: error while loading shared libraries libc++.so cannot open shared object file解决