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

定義

將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。

結構中包含的角色

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

一句話概括設計模式

通過分解構建步驟,控制構建順序,隔離復雜對象的創(chuàng)建和使用的方式,解決復雜對象的構建問題。

最小可表達代碼

// 需要構建的產(chǎn)品
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();

}
}

設計的原則和思想

控制對象創(chuàng)建的過程。

優(yōu)點

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

缺點

  1. 創(chuàng)建的產(chǎn)品必須有共同點,范圍有限制。
  2. 產(chǎn)品的內(nèi)部變化復雜,會導致需要定義很多具體建造者類來實現(xiàn)這種變化,導致系統(tǒng)變得很龐大

何時使用

  1. 生成的對象具有復雜的內(nèi)部結構。
  2. 需要生成的產(chǎn)品對象的屬性相互依賴,需要指定其生成順序。
  3. 對象的創(chuàng)建過程獨立于創(chuàng)建該對象的類。在建造者模式中通過引入了指揮者類,將創(chuàng)建過程封裝在指揮者類中,而不在建造者類和客戶類中。

實際應用場景

  1. JAVA 中的 StringBuilder。
  2. 商城的商品,收藏的商品,瀏覽過的商品,推薦的商品。可以使用建造者模式構建商品創(chuàng)建的過程。
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容