目录

代码示例

<?php 

namespace DesignPattern;

/**
 * Description of Builder
 *
 * @author jm
 */
class Builder
{
    //put your code here
    public static function main(){
        
        echo "捏个瘦子:\n";
        $personPainter = new PersonThinPainter();
        $director = new PersonPaintDirector($personPainter);
        $director->CreatePerson();
        
    }
}


//画人
abstract class PersonPainter
{
    abstract public function PaintHead();
    abstract public function PaintBody();
    abstract public function PaintArmLeft();
    abstract public function PaintArmRight();
    abstract public function PaintLegLeft();
    abstract public function PaintLegRight();
}

class PersonThinPainter extends PersonPainter
{
    public function PaintHead()
    {
        echo "小头\n";
    }

    public function PaintBody()
    {
        echo "小身子\n";
    }

    public function PaintArmRight()
    {
        echo "右臂\n";
    }

    public function PaintArmLeft()
    {
        echo "左臂\n";
    }

    public function PaintLegLeft()
    {
        echo "左腿\n";
    }

    public function PaintLegRight()
    {
        echo "右腿\n";
    }
}

class PersonFatPainter extends PersonPainter
{
    public function PaintHead()
    {
        echo "大头\n";
    }

    public function PaintBody()
    {
        echo "大身子\n";
    }

    public function PaintArmRight()
    {
        echo "右臂\n";
    }

    public function PaintArmLeft()
    {
        echo "左臂\n";
    }

    public function PaintLegLeft()
    {
        echo "左腿\n";
    }

    public function PaintLegRight()
    {
        echo "右腿\n";
    }
}

//画人 导演 发命令者
class PersonPaintDirector
{
    private $personPainter;
    function __construct($personPainter)
    {
        $this->personPainter = $personPainter;
    }

    public function CreatePerson()
    {
        $this->personPainter->PaintHead();
        $this->personPainter->PaintBody();
        $this->personPainter->PaintArmRight();
        $this->personPainter->PaintArmLeft();
        $this->personPainter->PaintLegLeft();
        $this->personPainter->PaintLegRight();
    }
}


Builder::main();

输出:

捏个瘦子:
小头
小身子
右臂
左臂
左腿
右腿

小结

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

如果我们用了建造者模式,那么用户只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。

主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通畅面临着复杂的变化。

建造者模式是在当创建复杂对象的算法应该独立于改对象的组成部分以及它们的装配方式时适用的模式。


本文部分收藏来自互联网,仅用于学习研究,著作权归原作者所有,如有侵权请联系删除

markdown @TsingChan