【php设计模式】建造者模式

<?php

/**
*建造者模式特点:
*    1.客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
*    2.每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者, *用户使用不同的具体建造者即可得到不同的产品对象 
*    3.建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式
*
*角色:
*    Product(产品角色):一个具体的产品对象。 
*    Builder(抽象建造者):创建一个Product对象的各个部件指定的抽象接口。 
*    ConcreteBuilder(具体建造者):实现抽象接口,构建和装配各个部件。 
*    Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,
*                        二是:负责控制产品对象的生产过程。
*
*示例:
*    通过建造者模式来创建不同配置的手机,用户购买手机时不需要知道手机是怎么生产出来的只要说自己要低配手机(低配建造者)还是高配手机(高配建造者)然后手机商(指挥者)去获取
*
*/


class Phone{
    public $ram;
    public $rom;
}

abstract class Builder{
    protected $phone;
    public function __construct(){
        $this->phone = new Phone;
    }
    public abstract function addRom();
    public abstract function addRam();
    public function getResult(){
        return $this->phone;
    }
}

class LowBuilder extends Builder{
    public function addRom(){
        $this->phone->rom = "4G";
    }

    public function addRam(){
        $this->phone->ram = "3G";
    }
}

class HightBuilder extends Builder{
    public function addRom(){
        $this->phone->rom = "6G";
    }

    public function addRam(){
        $this->phone->ram = "4G";
    }
}

class Shoper{
    public function __construct(Builder $builder){
        $builder->addRom();
        $builder->addRam();
    }
}

$builder = new HightBuilder();
new Shoper($builder);
var_dump($builder);

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=c33kfpax3kel

原文地址:https://www.cnblogs.com/itsuibi/p/10912719.html