萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php Builder建造器模式學習筆記

php Builder建造器模式學習筆記

星際裡面有不少的任務關,也可以自己編輯地圖,畫面上有各種地形,建築和部隊,存在一個問題,初始化畫面的流程很亂。待解決的問題:完成初始化畫面的工作,同時盡量減少各種繪制細節的耦合

思路:既然星際的畫面由幾個部分組成:地圖(就是地形和礦產),建築,部隊。那麼我們把他們看成是零件,組裝起來就是最後的產品(整個畫面)。


建造器(Builder)模式示例:

 代碼如下 復制代碼

<?php

//規范制造各個零件的接口

interface Builder

{

  //制造地圖零件

  public function buildMapPart();

  //制造建築零件

  public function buildBuildingPart();

  //制造部隊零件

  public function buildArmyPart();

  //組裝零件

  public function getResult();

}

//實際建造器類,比如初始化某個任務關

class ConcreteBuilder implements Builder

{

  //制造地圖零件

  public function buildMapPart()

  {

  //根據任務的設定畫上地圖

  echo '地圖零件n';

  }

  //制造建築零件

  public function buildBuildingPart()

  {

  //根據任務的設定畫上建築,包括玩家的和敵人的

  echo '建築零件n';

  }

  //制造部隊零件

  public function buildArmyPart()

  {

  //根據任務的設定畫上部隊,包括玩家的和敵人的

  echo '部隊零件n';

  }

  //組裝零件

  public function getResult()

  {

  //將所有的東西疊加和處理,形成初始化畫面

  echo '組裝零件n';

  }

}

//監督類,也就是控制繪制流程的類

class Director

{

  //私有屬性,確定使用的建造器

  private $builder;

  //構造方法,參數為選定的建造器對象

  public function __construct($builder)

  {

    //確定使用的建造器

    $this->builder = $builder;

  }

  //負責建造流程的方法,調用建造器對象的方法,制造所有零件

  public function buildeAllPart()

  {

    //制造地圖零件

    $this->builder->buildMapPart();

    //制造建築零件

    $this->builder->buildBuildingPart();

    //制造部隊零件

    $this->builder->buildArmyPart();

  }

}

//假設根據任務關,初始化我們需要的實際建造器對象

$concreteBuilder = new ConcreteBuilder();

//初始化一個監督對象

$director = new Director($concreteBuilder);

//制造所有零件

$director->buildeAllPart();

//最後讓建造器組裝零件,生成畫面

$concreteBuilder->getResult();

?>

用途總結:建造器模式可以將流程和細節分離,各司其職。


實現總結:需要一個建造器接口或者抽象類,負責規范各個方法,比如上面的Builder。然後讓實際的建造器類去實現所有的方法,比如上面的ConcreteBuilder。同時需要負責流程管理的監督類,比如上面的Director,負責調用建造器的各個零件制造方法。最後讓建造器去組裝所有的零件

copyright © 萬盛學電腦網 all rights reserved