@H_301_0@本文实例讲述了PHP设计模式之模板方法模式定义与用法。分享给大家供大家参考,具体如下:
@H_301_0@<span style="font-size: medium">
什么是模板方法模式
@H_301_0@
模板方法(Template Method)
设计模式中使用了一个类方法templateMethod(),该方法是抽象类中的一个具体方法,这个方法的作用是对抽象方法序列排序,具体实现留给具体类来完成.关键在于模板方法模式定义了操作中算法的"骨架",而由具体类来实现.@H_301_0@<span style="font-size: medium">
什么时候使用模板方法
@H_301_0@如果已经明确算法中的一些步骤,不过这些步骤可以采用多种不同的方法实现,就可以使用模板方法调试.如果算法中的步骤不变,可以把这些步骤留给子类具体实现.在这种情况下,可以使用模板方法设计模式来组织抽象类中的基本操作(函数/方法).然后由子类来实现应用所需的这些操作.
@H_301_0@还有一种用法稍微复杂一些,可能需要把子类共同的行为放在一个类中,以避免代码重复.
@H_301_0@如果使用多个类来解决同一个大型问题,可能很快就会出现重复代码.
@H_301_0@还有一点,可以使用模板方法模式控制子类扩展,也就是所谓的"钩子".
@H_3010@
示例
@H301_0@在PHP编程中,可能经常会遇到一个问题: 要建立带图题的图像. 这个算法相当简单,就是显示图像,然后的图像下面显示文本.
@H_301_0@由于模板设计中只涉及两个参与者,所以这是最容易理解的模式之一,同时也非常有用. 抽象建立
templateMethod()
,并由具体类实现这个方法.@H_3010@
抽象类
@H301_0@抽象类是这里的关键,因为它同时包含具体和抽象方法. 模板方法往往是具体方法,其操作是抽象的
@H_301_0@两个抽象方法分别是addPicture和addTitile,这两个操作都包含一个参数,分别表示图像的URL信息和图像标题.
@H_301_0@
Template.PHP
<div class="jb51code">
<pre class="brush:PHP;">
<?php
abstract 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);
}