PHP学习心得


建造者模式

<h3>建造者模式</h3> <ul> <li>也称生成器模式。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示</li> <li>有时候,如果建造者对他所创建的东西拥有较好的知识储备,这个接口就可能成为一个有默认方法的抽象类(又称为适配器)。</li> <li>如果对象有复杂的继承树,那么对于建造者来说,有一个复杂继承树也是符合逻辑的。</li> <li><strong>注意:</strong>建造者通常有一个「流式接口」,例如 PHPUnit 模拟生成器。</li> </ul> <h3>为什么需要建造者模式</h3> <ul> <li>对象的生产需要复杂的初始化,比如给一大堆类成员属性赋初值,设置一下其他的系统环境变量。使用建造者模式可以将这些初始化工作封装起来。</li> <li>对象的生成时可根据初始化的顺序或数据不同,而生成不同角色。</li> </ul> <h3>实例</h3> <ul> <li>在很多游戏软件中,地图包括天空、地面、背景等组成部分,人物角色包括人体、服装、装备等组成部分, <ul> <li>可以使用建造者模式对其进行设计,通过不同的具体建造者创建不同类型的地图或人物</li> </ul></li> <li>汽车,他的发动机引擎有好多品牌,轮胎也有各种材质,内饰更是千奇百怪;</li> <li>鸟,他的头、翅膀以及脚有各种颜色和形状,在创建这种复杂对象的时候,我们建议使用建造者模式。</li> </ul> <h3>建造者模式一般认为有四个角色:</h3> <ul> <li>1.产品角色,产品角色定义自身的组成属性</li> <li>2.抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品</li> <li>3.具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义</li> <li>4.指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品</li> </ul> <h3>代码示例</h3> <pre><code class="language-php">&lt;?php /** * 建造者模式 */ /**具体产品角色 鸟类 * Class Bird */ class Bird { public $_head; public $_wing; public $_foot; public function show() { echo "头的颜色:{$this-&gt;_head}&lt;br/&gt;"; echo "翅膀的颜色:{$this-&gt;_wing}&lt;br/&gt;"; echo "脚的颜色:{$this-&gt;_foot}&lt;br/&gt;"; } } /**抽象鸟的建造者(生成器) * Class BirdBuilder */ abstract class BirdBuilder { protected $_bird; public function __construct() { $this-&gt;_bird=new Bird(); } abstract public function BuildHead(); abstract public function BuildWing(); abstract public function BuildFoot(); abstract public function GetBird(); } /**具体鸟的建造者(生成器) 蓝鸟 * Class BlueBird */ class BlueBird extends BirdBuilder { public function BuildHead() { // TODO: Implement BuilderHead() method. $this-&gt;_bird-&gt;_head="Blue"; } public function BuildWing() { // TODO: Implement BuilderWing() method. $this-&gt;_bird-&gt;_wing="Blue"; } public function BuildFoot() { // TODO: Implement BuilderFoot() method. $this-&gt;_bird-&gt;_foot="Blue"; } public function GetBird() { // TODO: Implement GetBird() method. return $this-&gt;_bird; } } /**玫瑰鸟 * Class RoseBird */ class RoseBird extends BirdBuilder { public function BuildHead() { // TODO: Implement BuildHead() method. $this-&gt;_bird-&gt;_head="Red"; } public function BuildWing() { // TODO: Implement BuildWing() method. $this-&gt;_bird-&gt;_wing="Black"; } public function BuildFoot() { // TODO: Implement BuildFoot() method. $this-&gt;_bird-&gt;_foot="Green"; } public function GetBird() { // TODO: Implement GetBird() method. return $this-&gt;_bird; } } /**指挥者 * Class Director */ class Director { /** * @param $_builder 建造者 * @return mixed 产品类:鸟 */ public function Construct($_builder) { $_builder-&gt;BuildHead(); $_builder-&gt;BuildWing(); $_builder-&gt;BuildFoot(); return $_builder-&gt;GetBird(); } } $director=new Director(); echo "蓝鸟的组成:&lt;hr/&gt;"; $blue_bird=$director-&gt;Construct(new BlueBird()); $blue_bird-&gt;Show(); echo "&lt;br/&gt;Rose鸟的组成:&lt;hr/&gt;"; $rose_bird=$director-&gt;Construct(new RoseBird()); $rose_bird-&gt;Show(); </code></pre>

页面列表

ITEM_HTML