初识PHP设计模式--建造者模式

 建造者模式(Builder) 是我认为在创建型模式中算比较难理解的一种模式。

 建造者模式和抽象工厂模式有点相似都是去创建组合,但是抽象工厂用的多,建造者不常用。

 建造者模式的特点就是将创建和表示分离。

 继续以游戏为例,我们玩游戏创建英雄的时候,首先去抽象一个抽象建造者类,接着所有的英雄都继承这个抽象类。而Hero类是   英雄的表示类,与创建分离,所有英雄都可以通过这个类表示出来。

 如果需要增加英雄就直接添加一个类似Class GuanYu的类就好,在客户端切换。

 记录代码如下:

<?php

/**    
 * Created by Sublime.    
 * User: Ryan    
 * Date: 2018/1/18    
 * File:Builder.php    
 */  
Class Hero
{
	// 技能
	public $_skill;

	// 武器
	public $_weapon;

	// 坐骑
	public $_horse;

	/** 英雄表示方法,不同英雄又不同表示   
	 *  Display    
	 */ 
	function Display()
	{
		echo "绝招是:{$this->_skill}";
		echo "武器是:{$this->_weapon}";
		echo "坐骑是:{$this->_horse}";
	}
}

/** 英雄建造器 抽象类 
 *  abstract HeroBuilder    
 */
abstract Class HeroBuilder
{
    protected $_hero;
    function __construct()
    {
        $this->_hero = new Hero();
    }

    //抽象英雄绝招方法
    abstract function HeroSkill();

    //抽象英雄武器方法
    abstract function HeroWeapon();

    //抽象英雄坐骑方法
    abstract function HeroHorse();

    // 创建英雄方法
    abstract function CreateHero();
}

/** 关羽英雄类 继承抽象类必须完成抽象方法
 *  GuanYu   
 */
Class GuanYu extends HeroBuilder
{	
	function HeroSkill()
	{
        $this->_hero->_skill = "拖刀计<br/>";
	}
	function HeroWeapon()
	{
        $this->_hero->_weapon = "青龙偃月刀<br/>";
	}
	function HeroHorse()
	{
        $this->_hero->_horse = "赤兔马<br/>";
	}
	function CreateHero()
	{
        return $this->_hero;
	}
}

/** 英雄接口类
 *  HeroApi   
 */
Class HeroApi
{
    function Create($_obj)
    {
    	$_obj->HeroSkill();
    	$_obj->HeroWeapon();
    	$_obj->HeroHorse();
    	return $_obj->CreateHero();
    }
}


<?php
// 建造者模式 index.php
header("Content-Type:text/html;charset=utf-8");
require_once "Builder.php";

// 英雄接口类 
$obj = new HeroApi();

// 创建关羽英雄对象  以后想用什么就创建什么
$guanyu = new GuanYu();

// 创建加入战场
$guanyuhero = $obj->Create($guanyu);

echo "关羽加入战场<br/>";
$guanyuhero->Display();// 展示
输出结果:

关羽加入战场
绝招是:拖刀计
武器是:青龙偃月刀
坐骑是:赤兔马

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值