时间:2021-07-01 10:21:17 帮助过:20人阅读
建造者模式(Builder) 是我认为在创建型模式中算比较难理解的一种模式。
建造者模式和抽象工厂模式有点相似都是去创建组合,但是抽象工厂用的多,建造者不常用。
建造者模式的特点就是将创建和表示分离。
继续以游戏为例,我们玩游戏创建英雄的时候,首先去抽象一个抽象建造者类,接着所有的英雄都继承这个抽象类。而Hero类是 英雄的表示类,与创建分离,所有英雄都可以通过这个类表示出来。
如果需要增加英雄就直接添加一个类似Class GuanYu的类就好,在客户端切换。
记录代码如下:
<?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();// 展示
输出结果:
关羽加入战场
绝招是:拖刀计
武器是:青龙偃月刀
坐骑是:赤兔马
相关推荐:
PHP设计模式之 原型模式
PHP设计模式之 单例模式
PHP设计模式之抽象工厂
以上就是PHP设计模式之 建造者模式 的详细内容,更多请关注Gxl网其它相关文章!