首頁 > web前端 > js教程 > 主體

JavaScript設計模式系列三:建造者模式

不言
發布: 2018-04-02 13:58:42
原創
1365 人瀏覽過

這篇文章要跟大家分享的是JavaScript設計模式系列三:建造者模式,有興趣的朋友可以看一下

建造者模式

建造者模式(builder pattern )比較簡單,它屬於創建型模式的一種,將一個複雜的物件分解成多個簡單的物件來進行構建,將複雜的構建層與表示層分離,使得相同的構建過程可以創建不同的表示的模式便是建造者模式。

優點

  • 建造者模式的封裝性很好,物件本身與建置過程解耦。

  • 建造者模式很容易擴充。如果有新的需求,透過實現一個新的建造者類別就可以完成。

適用場景

需要產生的物件具有複雜到內部結構;且內部屬性本身相互依賴


建造者模式的程式碼實作

建造者模式主要有4個部分:product產品類別、Builder建造者類別、Director指揮者類別、客戶。

主要的流程是:
  1. 客戶提出需求。

  2. 指揮家根據使用者需求,指揮建造者去完成需求的各個部分。

  3. 建造者完成對應的部分。

我們來看看對應的程式碼:
產品類別為一輛加工的空殼汽車。

/**
 * 产品类:car 目前需要构建一辆车。
 */

function car () {
    this.name = '',
    this.number = '',
    this.wheel = '',
    this.engine = ''
}
登入後複製

接下來看一下建造者類別:

/* 
*    建造者类,里面有专门负责各个部分的工人
*/
function carBuilder () {
    this.nameBuilder = function () {
        this.name = '很厉害的车'
    },
    this.numberBuilder = function () {
        this.number = '88888888'
    },
    this.wheelBuilder = function () {
        this.wheel =  '高级橡胶做的轮子'
    },
    this.engineBuilder = function () {
        this.engine =  '很厉害的引擎'
    },
    this.getCar = function () {
        var Car = new car()
        Car.name = this.name;
        Car.number= this.number;
        Car.wheel = this.wheel;
        Car.engine = this.engine;
        return Car;
    }
}
登入後複製

再這裡我們可以看到各個部分的工人以及他們的工作,他們的各自的工作最終合併成一輛汽車。

指揮者類別:

/**
 *   指挥者类,指挥各个部分的工人工作
 */
function director () {
    this.action = function (builder) {
        builder.nameBuilder();
        builder.numberBuilder();
        builder.wheelBuilder();
        builder.engineBuilder();
    } 
}
登入後複製

最後就是使用方法:

/**
 *    使用方法
 */

var builder = new carBuilder();
var director = new director();
director.action(builder);
var Car = builder.getCar();
console.log(Car);
登入後複製

最終客戶透過getCar方法得到了這輛車,並且不需要知道其中得建造細節。


總結

建造者模式主要用於“分佈建立一個複雜的物件”,它很容易進行擴展。如果有新的需求,透過實作一個新的建造者類別就可以完成,而建造者模式解耦了物件本身與建置過程,使得我們不用關心特定的建造過程。

相關推薦:

JavaScript設計模式系列一:工廠模式

JavaScript設計模式系列二:單例模式


以上是JavaScript設計模式系列三:建造者模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板