首页 > 开发 > PHP > 正文

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

2024-05-04 22:43:45
字体:
来源:转载
供稿:网友

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

什么是模板方法模式

模板方法(Template Method)设计模式中使用了一个类方法templateMethod(), 该方法是抽象类中的一个具体方法, 这个方法的作用是对抽象方法序列排序,具体实现留给具体类来完成.关键在于模板方法模式定义了操作中算法的"骨架",而由具体类来实现.

什么时候使用模板方法

如果已经明确算法中的一些步骤, 不过这些步骤可以采用多种不同的方法实现, 就可以使用模板方法调试.如果算法中的步骤不变, 可以把这些步骤留给子类具体实现.在这种情况下, 可以使用模板方法设计模式来组织抽象类中的基本操作(函数/方法).然后由子类来实现应用所需的这些操作.

还有一种用法稍微复杂一些, 可能需要把子类共同的行为放在一个类中, 以避免代码重复.

如果使用多个类来解决同一个大型问题, 可能很快就会出现重复代码.

还有一点,可以使用模板方法模式控制子类扩展,也就是所谓的"钩子".

示例

在PHP编程中,可能经常会遇到一个问题: 要建立带图题的图像. 这个算法相当简单, 就是显示图像, 然后的图像下面显示文本.

由于模板设计中只涉及两个参与者, 所以这是最容易理解的模式之一, 同时也非常有用. 抽象建立templateMethod(),并由具体类实现这个方法.

抽象类

抽象类是这里的关键, 因为它同时包含具体和抽象方法. 模板方法往往是具体方法, 其操作是抽象的

两个抽象方法分别是addPicture和addTitile,这两个操作都包含一个参数, 分别表示图像的URL信息和图像标题.

Template.php

<?phpabstract class Template{  protected $picture;  protected $title;  public function display($pictureNow, $titleNow)  {    $this->picture = $pictureNow;    $this->title = $titleNow;    $this->addPicture($this->picture);    $this->addTitle($this->title);  }  abstract protected function addPicture($picture);  abstract protected function addTitle($title);}

具体类

Concrete.php

<?phpinclude_once('Template.php');class Concrete extends Template{  protected function addPicture($picture)  {    $this->picture = 'picture/' . $picture;    echo "图像路径为:" . $this->picture . '<br />';  }  protected function addTitle($title)  {    $this->title = $title;    echo "<em>标题: </em>" . $this->title . "<br />";  }}

客户

Client.php

<?phpfunction __autoload($class_name){  include $class_name . '.php';}class Client{  public function __construct()  {    $title = "chenqionghe is a handsome boy";    $concrete = new Concrete();    $concrete->display('chenqionghe.png', $title);  }}$worker = new Client();            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表