極簡(jiǎn)設(shè)計(jì)模式-建造者模式

定義

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

結(jié)構(gòu)中包含的角色

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

一句話概括設(shè)計(jì)模式

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

最小可表達(dá)代碼

// 需要構(gòu)建的產(chǎn)品
class WebProduct
{
private $language;

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

}

// 抽象構(gòu)建者
abstract class BaseBuilder
{
protected $webProduct;

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

public abstract function  buildLanguage();

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

}

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

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

   return $builder->makeProduct();

}
}

設(shè)計(jì)的原則和思想

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

優(yōu)點(diǎn)

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

缺點(diǎn)

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

何時(shí)使用

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

實(shí)際應(yīng)用場(chǎng)景

  1. JAVA 中的 StringBuilder。
  2. 商城的商品,收藏的商品,瀏覽過的商品,推薦的商品??梢允褂媒ㄔ煺吣J綐?gòu)建商品創(chuàng)建的過程。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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