建造者模式

<?php
/**
 * 建造者模式
 * -------------
 * @author         zhaoxuejie <zxj198468@gmail.com>
 * @package     design pattern
 * @version     v1.0 2011-12-14
 */

/*产品角色-在指导者的指导下由建造者所创建的那个复杂的对象*/
class Person
{
    private $head;
    private $body;
    private $foot;
    //
    public function getHead()
    {
        return $this->head;
    }
    public function setHead($head)
    {
        $this->head = $head;
    }

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

    //
    public function getFoot()
    {
        return $this->foot;
    }
    public function setFoot($foot)
    {
        $this->foot = $foot;
    }
}

/*抽象建造者-创建一个product对象的各个部件指定抽象接口*/
interface PersonBuilder
{

    public function buildHead();
    public function buildBody();
    public function buildFoot();
    public function getResult();//产品返还方法
}

/*具体建造者-实现接口*/
class ConcreteBuilder implements PersonBuilder
{
    private $person;

    function __construct()
    {
        $this->person = new Person();
    }

    function buildHead()
    {
        $this->person->setHead('建造头……');
    }

    function buildBody()
    {
        $this->person->setBody('建造身体……');
    }

    function buildFoot()
    {
        $this->person->setFoot('建造脚……');
    }

    function getResult()
    {
        return $this->person;
    }
}

/*导演者-指导者导演者角色与客户端直接打交道,它理解客户端的业务逻辑,
将客户端创建产品的请求拆分成对产品组成部分的请求,
然后调用具体产品角色执行建造操作。它分离了客户端与具体建造者
*/
class Director
{
    public function __construct(ConcreteBuilder $builder)
    {
        $builder->buildHead();
        $builder->buildBody();
        $builder->buildFoot();
    }
}

/*客户端*/
class Client
{
    public static function main()
    {
        $builder = new ConcreteBuilder();
        $director = new Director($builder);
        $person = $builder->getResult();
        echo $person->getHead();
        echo $person->getBody();
        echo $person->getFoot();
    }
}

Client::main();

?>
原文地址:https://www.cnblogs.com/jiufen/p/4994478.html