php建造者模式 - 组装车

1 模式介绍



 是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示


2 模式中的角色



    1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
    
    2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
    
    3. Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
    
    4. Product:要创建的复杂对象。


3 模式结构

php建造者模式 - 组装车_第1张图片





4 项目

4.1 设计一个车的组装过程


4.2 类设计

php建造者模式 - 组装车_第2张图片


4.3 源码设计

<?php

/** 
 * 建造者模式
 * copyright (c) http://blog.csdn.net/CleverCode   
 */  

//需要建造的产品(product)
class Car
{/*{{{*/
    public $name;
    public $engine;//发动机
    public $chassis;//底盘
    public $body;//车身
    public $equipment;//电器设备

    public function setName($name)
    {
        $this->name = $name;
    }

    public function setEngine($engine)
    {
        $this->engine = $engine;
    }

    public function setChassis($chassis)
    {
        $this->chassis = $chassis;
    }

    public function setBody($body)
    {
        $this->body = $body;
    }

    public function setEquipment($equipment)
    {
        $this->equipment = $equipment;
    }

    public function show()
    {
        echo "名称:".$this->name."\r\n";
        echo "引擎:".$this->engine."\r\n";
        echo "底盘:".$this->chassis."\r\n";
        echo "车身:".$this->body."\r\n";
        echo "电子设备:".$this->equipment."\r\n";

    }

}/*}}}*/

//builder
interface IBuilder
{/*{{{*/
    public function builderName();
    public function builderEngine();
    public function builderChassis();
    public function builderBody();
    public function builderEquipment();
    public function getCar();
}/*}}}*/

//红旗车builder
class RedBuilder implements IBuilder
{/*{{{*/
    public $car;

    public function __construct()
    {
        $this->car = new Car();
    }

    public function builderName()
    {
        $this->car->setName('红旗'); 
    }

    public function builderEngine()
    {
        $this->car->setEngine('国产发动机'); 
    }

    public function builderChassis()
    {
        $this->car->setChassis('超大底盘'); 
    }

    public function builderBody()
    {
        $this->car->setBody('超大'); 
    }
    public function builderEquipment()
    {
        $this->car->setEquipment('电子设备'); 
    }

    public function getCar()
    {
        return $this->car;
    }

}/*}}}*/

//QQ车builder
class QQBuilder implements IBuilder
{/*{{{*/
    public $car;

    public function __construct()
    {
        $this->car = new Car();
    }

    public function builderName()
    {
        $this->car->setName('QQ'); 
    }

    public function builderEngine()
    {
        $this->car->setEngine('国产发动机'); 
    }

    public function builderChassis()
    {
        $this->car->setChassis('小底盘'); 
    }

    public function builderBody()
    {
        $this->car->setBody('小'); 
    }
    public function builderEquipment()
    {
        $this->car->setEquipment('电子设备'); 
    }

    public function getCar()
    {
        return $this->car;
    }
}/*}}}*/

//组装者(director)
class CarDirector
{/*{{{*/
    public function make(IBuilder $builder)
    {
        $builder->builderName();
        $builder->builderEngine();
        $builder->builderChassis();
        $builder->builderBody();
        $builder->builderEquipment();
        return $builder->getCar();
    }
}/*}}}*/

class Client
{/*{{{*/
    public static function main($argv)
    {
        $director = new CarDirector(); 
        $redBuilder = new RedBuilder();
        $car = $director->make($redBuilder);
        $car->show();

        echo "\r\n";
        $qqBuilder = new QQBuilder();
        $car = $director->make($qqBuilder);
        $car->show();
    }
}/*}}}*/
Client::main($argv);
?>

4.4 结果

php建造者模式 - 组装车_第3张图片

你可能感兴趣的:(php建造者模式 - 组装车)