PHP面向对象-建造者模式

  1. 建造者模式(Builder Pattern)

       建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

       在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。

  • 优点
  1. 建造者独立,易扩展。
  2. 便于控制细节风险。
  • 缺点
  1. 产品必须有共同点,范围有限制。
  2. 如内部变化复杂,会有很多的建造类。
  • 主要解决

主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

  • 何时使用

一些基本部件不会变,而其组合经常变化的时候。

  • 应用场景
  1. 需要生成的对象具有复杂的内部结构。
  2. 用户买电脑&电脑组装
  • 实现

用户A购买电脑A(CPU i5, 内存8G,硬盘1T);

用户B购买电脑B(CPU i3, 内存4G,硬盘500G);

PC产品类Product.php
class Product{  
  
    public $_cpu;  
    public $_memory;  
    public $_hard;  
  
    public function show(){  
        echo "CPU:{$this->_cpu}<br>";  
        echo "内存:{$this->_memory}<br>";  
        echo "硬盘:{$this->_hard}<br>";  
    }  
}  

抽象建造者 Builde.php
abstract class Builder{  
    protected $_pc;  
    function __construct()  
    {  
        $this->_pc = new Product();  
    }  
    abstract public function BuildCpu();  
    abstract public function BuildMemory();  
    abstract public function BuildHard();  
    abstract  public function GetPc();  
}

PC制造A:  ContreteBuilderA.php
class ConcreteBuilderA extends Builder{  
    public function BuildCpu(){  
        $this-> _pc ->_cpu = 'i5';  
    }  
  
    public function BuildMemory(){  
        $this -> _pc ->_memory = '8G';  
    }  
  
    public function BuildHard(){  
        $this -> _pc -> _hard = '1T';  
    }  
  
    public function GetPc(){  
        return $this-> _pc;  
    }  
}  

PC制造B:  ContreteBuilderB.php
class ConcreteBuilderB extends Builder{  
    public function BuildCpu(){  
        $this-> _pc ->_cpu = 'i3';  
    }  
  
    public function BuildMemory(){  
        $this -> _pc ->_memory = '4G';  
    }  
  
    public function BuildHard(){  
        $this -> _pc -> _hard = '500G';  
    }  
  
    public function GetPc(){  
        return $this-> _pc;  
    }  
}  

导演类 Director.php
class Director{  
    public function Construct(Builder $builder){  
        $builder ->BuildCpu();  
        $builder ->BuildMemory();  
        $builder ->BuildHard();  
        return $builder->GetPc();  
    }  
} 

测试调用:
$director = new App\BuildObj\Director();  
echo 'A用户买了电脑A:<br>';  
$pcA = $director->Construct( new \App\BuildObj\ConcreteBuilderA());  
$pcA ->show();  
echo '------------------<br>';  
echo 'B用户买了电脑B:<br>';  
$pcB = $director->Construct( new \App\BuildObj\ConcreteBuilderB());  
$pcB ->show();  

输出结果:
A用户买了电脑A:  
CPU:i5  
内存:8G  
硬盘:1T  
------------------  
B用户买了电脑B:  
CPU:i3  
内存:4G  
硬盘:500G  

需要完整代码请点击这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值