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


Posted in PHP onDecember 20, 2018

本文实例讲述了PHP设计模式之模板模式定义与用法。分享给大家供大家参考,具体如下:

模板模式准备一个抽象类,将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。

UML类图:

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

角色:

抽象模板角色(MakePhone):抽象模板类,定义了一个具体的算法流程和一些留给子类必须实现的抽象方法。

具体子类角色(XiaoMi):实现MakePhone中的抽象方法,子类可以有自己独特的实现形式,但是执行流程受MakePhone控制。

核心代码:

<?php
/**
 * Created by PhpStorm->
 * User extends Jang
 * Date extends 2015/6/10
 * Time extends 11 extends 06
 */
//抽象模板类
abstract class MakePhone
{
  protected $name;
  public function __construct($name)
  {
    $this->name=$name;
  }
  public function MakeFlow()
  {
    $this->MakeBattery();
    $this->MakeCamera();
    $this->MakeScreen();
    echo $this->name."手机生产完毕!<hr/>";
  }
  public abstract function MakeScreen();
  public abstract function MakeBattery();
  public abstract function MakeCamera();
}
//小米手机
class XiaoMi extends MakePhone
{
  public function __construct($name='小米')
  {
    parent::__construct($name);
  }
  public  function MakeBattery()
  {
    echo "小米电池生产完毕!<br/>";
  }
  public  function MakeCamera()
  {
    echo "小米相机生产完毕!<br/>";
  }
  public function MakeScreen()
  {
    echo "小米屏幕生产完毕!<br/>";
  }
}
//魅族手机
class FlyMe extends MakePhone
{
  function __construct($name='魅族')
  {
    parent::__construct($name);
  }
  public  function MakeBattery()
  {
    echo "魅族电池生产完毕!<br/>";
  }
  public  function MakeCamera()
  {
    echo "魅族相机生产完毕!<br/>";
  }
  public  function MakeScreen()
  {
    echo "魅族屏幕生产完毕!<br/>";
  }
}

调用客户端测试代码:

header("Content-Type:text/html;charset=utf-8");
//-------------------------模板模式---------------------
require_once "./Template/Template.php";
$miui=new XiaoMi();
$flyMe=new FlyMe();
$miui->MakeFlow();
$flyMe->MakeFlow();

运行结果:

小米电池生产完毕!
小米相机生产完毕!
小米屏幕生产完毕!
小米手机生产完毕!
--------------------------------------------------------------------------------
魅族电池生产完毕!
魅族相机生产完毕!
魅族屏幕生产完毕!
魅族手机生产完毕!
--------------------------------------------------------------------------------

适用场景及优势:

1、完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时。我们通常考虑用模板模式来处理。

2、当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们通过模板模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。

3、模板模式通过把不变的行为搬移到超级抽象类,去除子类中的重复代码来体现它的优势。模板模式提供了一个很好的代码复用平台。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP实现文件安全下载
Oct 09 PHP
PHP $_SERVER详解
Jan 16 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 PHP
php对称加密算法示例
May 07 PHP
PHP解决URL中文GBK乱码问题的两种方法
Jun 03 PHP
php对包含html标签的字符串进行截取的函数分享
Jun 19 PHP
PHP Reflection API详解
May 12 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
PHP如何实现Unicode和Utf-8编码相互转换
Jul 29 PHP
php 问卷调查结果统计
Oct 08 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
php微信开发之谷歌测距
Jun 14 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
Dec 20 #PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 #PHP
PHP自定义错误处理的方法分析
Dec 19 #PHP
PHP异常类及异常处理操作实例详解
Dec 19 #PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 #PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 #PHP
PHP获取星期几的常用方法小结
Dec 18 #PHP
You might like
php4的session功能评述(一)
2006/10/09 PHP
YII中assets的使用示例
2014/07/31 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
在Python的循环体中使用else语句的方法
2015/03/30 Python
python 使用shutil复制图片的例子
2019/12/13 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
python实现最速下降法
2020/03/24 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
员工评语大全
2014/01/19 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
2014年评职称工作总结
2014/11/20 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技