極簡設計模式-建造者模式

long2ge發表於2021-11-11

定義

將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

結構中包含的角色

  1. Builder(抽象建造者)
  2. ConcreteBuilder(具體建造者)
  3. Product(產品角色)
  4. Director(指揮者)

一句話概括設計模式

透過分解構建步驟,控制構建順序,隔離複雜物件的建立和使用的方式,解決複雜物件的構建問題。

最小可表達程式碼

// 需要構建的產品
class WebProduct
{
private $language;

public  function setLanguage(String $language)
{
    $this->language  = $language;
}

}

// 抽象構建者
abstract class BaseBuilder
{
protected $webProduct;

public function __construct()
{
    $this->webProduct = new WebProduct();
}

public abstract function  buildLanguage();

public function makeProduct()
{
    return $this->webProduct;
}

}

// 具體構建者
class PHPBuilder extends BaseBuilder
{
public function buildLanguage()
{
$this->webProduct->setLanguage(‘php’);
}
}

// 指揮者
class WebDirector
{
public function make(BaseBuilder $builder)
{
$builder->buildLanguage();

   return $builder->makeProduct();

}
}

設計的原則和思想

控制物件建立的過程。

優點

  1. 將複雜產品的建立步驟分解在不同方法中,使得建立過程更加清晰,方便控制。
  2. 具體建造者間相互獨立,若想增減時無須修改其他程式碼。

缺點

  1. 建立的產品必須有共同點,範圍有限制。
  2. 產品的內部變化複雜,會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大

何時使用

  1. 生成的物件具有複雜的內部結構。
  2. 需要生成的產品物件的屬性相互依賴,需要指定其生成順序。
  3. 物件的建立過程獨立於建立該物件的類。在建造者模式中透過引入了指揮者類,將建立過程封裝在指揮者類中,而不在建造者類和客戶類中。

實際應用場景

  1. JAVA 中的 StringBuilder。
  2. 商城的商品,收藏的商品,瀏覽過的商品,推薦的商品。可以使用建造者模式構建商品建立的過程。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Long2Ge

相關文章