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中使用与Perl兼容的正则表达式
Nov 26 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
PHP+MySQL投票系统的设计和实现分享
Sep 23 PHP
基于MySQL体系结构的分析
May 02 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
php 深入理解strtotime函数的使用详解
May 23 PHP
php 模拟POST提交的2种方法详解
Jun 17 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
Mar 23 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 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解析url的三个示例
2014/01/20 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
php生成验证码函数
2015/10/20 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
Js实现无刷新删除内容
2015/04/29 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
浅谈Python 的枚举 Enum
2017/06/12 Python
Python3中使用PyMongo的方法详解
2017/07/28 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
中专毕业自我鉴定
2013/10/16 职场文书
大学毕业生自荐书怎么写?
2014/01/06 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
商业融资计划书
2014/04/29 职场文书
机械专业技术员求职信
2014/06/14 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python