初识PHP设计模式--模板方法模式

 模板方法(Template)模式是一种结构很简单的行为型模式,
 百度定义:一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
 特定:灵活度高,可扩展性强。

 通俗来说:在抽象父类中定义一个模板方法的方法,通过子类的覆盖使得相同算法框架可以有不同的执行结果

 比如某餐厅有A,B两个套餐,里面包含的饮料和食物不同,则可以用代码表示如下:


*学习规范:如果子类是具体方法,那么父类作为抽象层只能是抽象类,不能用接口。

<?php

// 抽象模板类
abstract Class SetMealModel
{
    /**   
     * A,B套餐   
     * @var string   
     */ 
	public $name;

    /**   
     * 初始化构造A,B套餐  
     * @access public    
     * @param  string $_name  
     */ 
    function __construct($_name)
    {
        $this->name =$_name;
    }

    /**   
     * 模板方法的方法  
     * @access public  
     */ 
    public function Make()
    {
    	$this->MakeDrink();
    	$this->MakeFood();
    	echo $this->name."完成<br/>";
    }
    /**   
     *  抽象饮料制作方法  
     * @access public  
     */ 
    public abstract function MakeDrink();
    
    /**   
     *  抽象饮料主食方法  
     * @access public  
     */
    public abstract function MakeFood();
}

// 具体A套餐
Class AsetMeal extends SetMealModel
{
    /**   
     * 初始构造A套餐  
     * @access public    
     * @param  string $name  
     */ 
	function __construct($name = "A套餐")
	{
		parent::__construct($name);
	}
    /**   
     *  具体饮料制作方法  
     * @access public  
     */
	function MakeDrink()
	{
        echo $this->name."饮料:雪碧<br/>";
	}
    /**   
     *  具体主食制作方法  
     * @access public  
     */
	function MakeFood()
	{
        echo $this->name."主食:照烧鸡排饭<br/>";
	}
}

// B套餐
Class BsetMeal extends SetMealModel
{
    /**   
     * 初始构造B套餐  
     * @access public    
     * @param  string $name  
     */ 
	function __construct($name = "B套餐")
	{
        parent::__construct($name);
	}
    /**   
     *  具体饮料制作方法  
     * @access public  
     */
	function MakeDrink()
	{
        echo $this->name."饮料:可乐<br/>";
	}
    /**   
     *  具体主食制作方法  
     * @access public  
     */
	function MakeFood()
	{
        echo $this->name."主食:咖喱猪排饭<br/>";
	}
}


<?php

header("Content-Type:text/html;charset=utf-8");

require_once "Template.php";

// A套餐
$one = new AsetMeal();
$one->Make();

// B套餐
$two = new BsetMeal();
$two->Make();

结果如下:

A套餐饮料:雪碧
A套餐主食:照烧鸡排饭
A套餐完成
B套餐饮料:可乐
B套餐主食:咖喱猪排饭
B套餐完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值