模板模式 php,PHP设计模式5-模板模式
星际中的虫族部队有个特别的进化兵种,就是飞龙,飞龙可以变成空中卫士(天蟹)或者吞噬者(对空的)。另外还有口水兵可以进化变成地刺。
这三个变化过程都是类似的:变化的原部队消失,产生一个蛋或茧,孵化一会儿,蛋消失,新的部队产生。
如果我们把这三个进化独立开,就会产生重复的代码,冗余度增大了,所以我们要设法减少多余的代码。
待解决的问题:要经历同样的几个步骤,只是每个步骤的细节会有不同。
思路:做一个进化工程的框架,我们只要控制细节就可以了。
模板模式模式示例:
//进化的框架类,它是个抽象类
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-模板模式相关推荐
- android常用的工厂模式,Android的设计模式-简单工厂模式
前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中:java 1.定义 定义一个用于建立对象的接口,让子类决定实例化哪一个类.设计模式 2.介绍 简单工厂模式属于建立型模式. 简单工厂模 ...
- android 状态模式,Android编程设计模式之状态模式详解
本文实例讲述了Android编程设计模式之状态模式.分享给大家供大家参考,具体如下: 一.介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但它们 ...
- 建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例
本文实例讲述了PHP设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式: 将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1). 来点我人类能听懂的话: 1.在客户端看来需 ...
- 模式的模式:从设计模式到元模式
最近的一两个月里,我一直在研究各类的模式:设计模式.架构模式.容器模式,以及其它一些特定领域的模式(如并行计算模式)等等. 经历了一番买书.读论文.读代码,我发现了以前对于模式的理解不够深刻.也因此呢 ...
- 设计模式之外观模式php,PHP设计模式:外观模式
前言 菜鸟教程对外观模式的描述是:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口, ...
- python文件合法模式组合_python设计模式之组合模式
最开始接触组合设计模式是在大话设计模式这本书中的案例,讲的是让你设计一个公司的组织架构,一个总公司下有人力资源部门,IT部门, 财务部门,还有广州分公司.深圳分公司,在分公司下也有IT部门和财务部门, ...
- 设计模式 原型模式_创新设计模式:原型模式
设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...
- java工厂模式 uml_深入浅出设计模式-简单工厂模式
模式定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式定义了一个创建对象的类,由这个类来封装实例化 ...
- java并发编程:设计原则与模式_java编程设计模式一——策略模式
定义: 策略模式定义了算法族,分别封装起来,让它们之间相互替代.此模式让算法的变化独立于使用算法的客户. 问题描述: 建立一个鸭子Duck的父类,它有很多子类,Duck都会游泳,但是有鸭子会飞,有的鸭 ...
最新文章
- PC问题-该虚拟机似乎正在使用中
- 量子计算机,开启中国速度
- C和指针之Eratosthenes-埃拉托斯特尼筛方法找质数
- REVERSE-PRACTICE-BUUCTF-14
- webkitlineclamp css3,-webkit-line-clamp
- JQuery基本获取值的方式
- C语言:将数组中的第一个数与最后一个数,第二个数与倒数第二个数依次完成镜像对调
- 线索二叉树(Binary Thread Tree)
- Atitit WatchService 使用和不能监控抓取到的解决 原因是生成速度太快,但处理速度慢,导致许多event 忽视了.. How to solu??? asyn to process
- linux 文本编辑器Vim/Vi详细介绍
- 微信支付H5完整版代码
- 分享好用的Mac系统的FTP工具和SHELL工具
- 干货|PMP项目管理计划汇总!
- 如何设计一张合格的日志表
- React脚手架安装
- [论文总结] 深度学习在农业领域应用论文笔记8
- php 新浪微博登陆,PHP使用新浪微博登入第三方网站实例代码
- 按键精灵制作自用游戏脚本所需的简单操作
- Unity3D动画帧事件
- The server time zone value ‘�й���ʱ��’ is unrecognized or represents more than one time zone. You mu
热门文章
- DotNetNuke 5 User's Guide: Get Your Website Up and Running
- JS中的事件委托/事件代理详解
- 20165221 JAVA第四周学习心得
- php利用反射机制查找类和方法的所在位置
- [转]SQL Server 存储过程 一些常用用法(事物、异常捕捉、循环)
- 连接服务器用xshell还是linux,【linux☞5】xshell 连接服务器的简单介绍
- visual fortran常用数值算法集_资深游戏数值策划自白:数值不是你想象的那么简单!...
- Ubuntu18.04上AS运行模拟器报错:/dev/kvm device: permission denied
- [RK3288][Android6.0] StageFright解码流程小结
- Ubuntu 14.04报错: error while loading shared libraries libc++.so cannot open shared object file解决