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

建造者模式

建造者模式(builder pattern)比較簡單,它屬於建立型模式的一種,將一個複雜的對象分解成多個簡單的對象來進行構建,將複雜的構建層與表示層分離,使得相同的構建過程能夠建立不一樣的表示的模式即是建造者模式。ui

優勢

  • 建造者模式的封裝性很好,對象自己與構建過程解耦。
  • 建造者模式很容易進行擴展。若是有新的需求,經過實現一個新的建造者類就能夠完成。

適用場景

須要生成的對象具備複雜得內部結構;且內部屬性自己相互依賴this


建造者模式的代碼實現

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

主要的流程是:
  1. 客戶提出需求。
  2. 指揮者根據用戶需求,指揮建造者去完成需求的各個部分。
  3. 建造者完成相應的部分。

咱們來看一下相應的代碼:
產品類爲一輛加工的空殼汽車。對象

/**
 * 產品類:car 目前須要構建一輛車。
 */

function car () {
    this.name = '',
    this.number = '',
    this.wheel = '',
    this.engine = ''
}

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

/* 
*    建造者類,裏面有專門負責各個部分的工人
*/
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;
    }
}

再這裏咱們能夠看到各個部分的工人以及他們的工做,他們的各自的工做最終合併成一輛汽車。產品

指揮者類:io

/**
 *   指揮者類,指揮各個部分的工人工做
 */
function director () {
    this.action = function (builder) {
        builder.nameBuilder();
        builder.numberBuilder();
        builder.wheelBuilder();
        builder.engineBuilder();
    } 
}

最後就是使用方法:console

/**
 *    使用方法
 */

var builder = new carBuilder();
var director = new director();
director.action(builder);
var Car = builder.getCar();
console.log(Car);

最終客戶經過getCar方法獲得了這輛車,而且不須要知道其中得建造細節。function


總結

建造者模式主要用於「分佈構建一個複雜的對象」,它很容易進行擴展。若是有新的需求,經過實現一個新的建造者類就能夠完成,而且建造者模式解耦了對象自己與構建過程,使得咱們不用關心具體的建造過程。擴展

相關文章
相關標籤/搜索