004-PHP设计模式之模板方法模式

四、建造者模式

4.1什么是建造者模式

建造者模式也称为生成器模式,Separate the construction of a complex object from its representation sothat the same construction
process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)。
简答来说,就是把不同流程的类的生成单独抽到同一个管理类中。该类只负责调用具体的生产方法,不做其他的。

4.2怎么实现建造者模式

产品类:具体要生产的类

产品生产公共类:定义通用的方法

具体生产类:实现不同的产品类的属性和行为

构建者类:储存不同的具体生产类的调用方法

<?php

/**
 * 基础汽车类
 */
abstract class BaseCar
{
  public $sequence = [];
  abstract protected function start(); 
  abstract protected function alarm(); 
  abstract protected function stop(); 
  public function run()
  {
    foreach($this->sequence as $item) {
      if ($item == 'start') {
        $this->start();
      } else if ($item == 'alarm') {
        $this->alarm();
      } else if ($item == 'stop') {
        $this->stop();
      }
    }
  }
}

/**
 * 具体汽车类
 */
class BMCar extends BaseCar
{
  public $sequence = [];
  protected function start() {echo 'start BM',PHP_EOL;}
  protected function alarm() {echo 'alarm BM',PHP_EOL;}
  protected function stop() {echo 'stop BM',PHP_EOL;}
}

/**
 * 生产者基础类
 */
abstract class BaseBuilder
{
  abstract public function setSequence($sequence);
  abstract public function getModel();
}

/**
 * 具体生产者类
 */
class BMBuilder extends BaseBuilder
{
  private $bmModel = null;
  public function __construct()
  {
    $this->bmModel = new BMCar();
  }

  public function setSequence($sequence)
  {
    $this->bmModel->sequence = $sequence;
  }

  public function getModel()
  {
    return $this->bmModel;
  }
}

/**
 * 生成器类
 */
class CarGenerator
{
  // 储存方法顺序
  private $sequence = [];

  // 具体要生产哪个类
  private $bmBuilder;

  public function __construct()
  {
    $this->bmBuilder = new BMBuilder();
  }

  public function getBMCar()
  {
    $this->sequence = [];
    $this->sequence[] = 'start';
    $this->sequence[] = 'stop';
    $this->bmBuilder->setSequence($sequence);
    return $this->bmBuilder->getModel();
  }
}

4.3建造者模式优点是什么

  1. 封装性:客户端不用关心产品内部组成的细节

  2. 建造者队列,容易拓展

  3. 便于控制细节风险:具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响

4.4建造者模式和工厂模式的区别

  1. 建造者模式主要的功能是基本方法的调用顺序安排,通俗一点就是零件的装配,顺序不同产生不同的结果

  2. 工厂模式重点是创建,创建零件是它的主要职责,组装顺序则不是它所关心的

4.5使用场景

  1. 相同的方法,不同的执行顺序,产生不同的事件结果是,可以采用建造个模式

  2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时

  3. 产品类分成复杂,或者产品类中的调用顺序不同产生了不同的效能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值