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下实现折线图效果的代码
Apr 28 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
php在服务器执行exec命令失败的解决方法
Mar 03 PHP
如何使用PHP计算上一个月的今天
May 23 PHP
php5.5新数组函数array_column使用
Jul 08 PHP
php生成数组的使用示例 php全组合算法
Jan 16 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
PHP的openssl加密扩展使用小结(推荐)
Jul 18 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
基于PHP常用文件函数和目录函数整理
Aug 17 PHP
Yii2框架加载css和js文件的方法分析
May 25 PHP
详解PHP中的8个魔术常量
Jul 06 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
PHP 数组教程 定义数组
2009/10/23 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
让人蛋疼的JavaScript语法特性
2014/09/30 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
浅谈python中的占位符
2017/11/09 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
python实现图片彩色转化为素描
2019/01/15 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
工程师求职简历的自我评价分享
2013/10/10 职场文书
法律专业应届生自荐信范文
2014/01/06 职场文书
股份合作协议书
2014/09/10 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
捐资助学感谢信
2015/01/21 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang