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解析html的实现代码
Aug 08 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
Sep 23 PHP
深入PHP获取随机数字和字母的方法详解
Jun 06 PHP
php xml常用函数的集合(比较详细)
Jun 06 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
替换php字符串中的单引号为双引号的方法
Feb 16 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP上传文件及图片到七牛的方法
Jul 25 PHP
PHP如何将图片文件上传到另外一台服务器上
Aug 26 PHP
php中try catch捕获异常实例详解
Aug 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
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
Python中optparse模块使用浅析
2015/01/01 Python
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
利用python求积分的实例
2019/07/03 Python
python各层级目录下import方法代码实例
2020/01/20 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
自荐信要包含哪些内容
2013/11/06 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
婚礼父母答谢词
2015/01/04 职场文书
文员岗位职责
2015/02/04 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技