ZetCode

JavaScript Builder 模式教程

最后修改于 2023 年 10 月 18 日

在本文中,我们将展示如何使用 Builder 模式在 JavaScript 中创建对象。

Builder 模式

Builder 模式 是一种设计模式,用于提供创建对象的灵活解决方案。Builder 模式将复杂对象的构建与其表示分离开来。

Builder 模式通过提供一种逐步的方法,使用简单对象构建复杂对象。它属于创建型模式。

Builder 模式示例

以下示例使用 TaskBuilder 实现 Builder 模式。

task_creator.js
let Task = function(name, description, finished, dueDate) {

    this.name = name;
    this.description = description;
    this.finished = finished;
    this.dueDate = dueDate;
}

let TaskBuilder = function () {

    let name;
    let description;
    let isFinished = false;
    let dueDate;

    return {
        setName: function (name) {
            this.name = name;
            return this;
        },
        setDescription: function (description) {
            this.description = description;
            return this;
        },
        setFinished: function (finished) {
            this.finished = finished;
            return this;
        },
        setDueDate: function (dueDate) {
            this.dueDate = dueDate;
            return this;
        },
        build: function () {
            return new Task(name, description, isFinished, dueDate);
        }
    };
};

let task = new TaskBuilder().setName('Task A').setDescription('finish book')
    .setDueDate(new Date(2019, 5, 12));
console.log(task);

在这个例子中,我们有一个 TaskBuilder,它生成 Task 对象。

let Task = function(name, description, finished, dueDate) {

    this.name = name;
    this.description = description;
    this.finished = finished;
    this.dueDate = dueDate;
}

这是一个 Task 对象。它有四个属性:name, description, finished, 和 dueDate

return {
    setName: function (name) {
        this.name = name;
        return this;
    },
...    

TaskBuilder 返回设置这四个属性的函数。请注意,每个函数都返回 this,即对当前对象的引用。这样我们就可以链式调用函数。这种函数调用链被称为 流畅 API

let task = new TaskBuilder().setName('Task A').setDescription('finish book')
    .setDueDate(new Date(2019, 5, 12));
console.log(task);

我们使用 TaskBuilder 创建一个任务。

来源

Builder 模式

在本文中,我们介绍了 JavaScript 中的 Builder 模式。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了超过 1,400 篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

查看 所有 JavaScript 教程。