《JS设计模式》笔记-建造者模式

定义:建造者模式可以将一个复杂的对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示,用户只要指定需要建造的类型,其他具体的建造过程和细节不需要知道,就可以得出对应的结果。

冗长的定义,我简单理解一下就是,将一个复杂工作拆成多个相对独立的模块,每个模块完成自己的任务。最后想要什么自己拼装。

以建房子类比一下

// 建造
function Build(type) {
    console.log(`建造${type}`)
    this.buildType = type
}


// 工人
function Worker () {
    var workList =['房屋', '院子', '装修']
    this.woker = {
        buildType: [],
        name: '小明'
    }
    workList.forEach(item => {
    var build = new Build(item)
        this.woker.buildType.push(build.buildType)
    })
    this.getResult = function () {
        return {name: '房子建造完成'}
    }
}
// 承包商
function Contractor () {

    this.createWorker = function () {
        var worker = new Worker()
        return worker
    }

}
// 买家
function Buyer () {
    console.log('从买家拿到钱')
    this.money = 1000
    this.buyer = '有钱人'
}

function BuildHouse () {
    // 买家 从买家拿钱
    this._buyer = new Buyer()
    // 承包商  钱给承包商
    this._contractor = new Contractor()

    // 工人 承包商创建工人干活儿
    this._worker = this._contractor.createWorker()

    // 建造完成
    this.buildResult = this._worker.getResult()
}
// 房屋
var house = new BuildHouse()
console.log(house)

最终,拿到的是建造好的房子,以及整个建造过程中参与进来的必要方法和属性。

他的灵活性,还体现在,由于整个过程是相对解耦的,所以BuildHouse的时候也可以任意组合,比如不找承包商,自己找工人

function BuildHouse () {
    // 买家 从买家拿钱
    this._buyer = new Buyer()

    // 工人 自己找工人
    this._worker = new Worker()

    // 建造完成
    this.buildResult = this._worker.getResult()
}

随机浏览