Appearance
工厂模式
使用工厂模式,我们可以通过 工厂方法 来创建对象。一个工厂方法可以在不使用 new
关键字的情况下,返回一个新的对象。
假设我们的应用需要很多用户,我们可以创建很多带有 firstName
、lastName
和 email
属性的用户对象。工厂函数还会向新创建的对象添加 fullName
方法,该属性返回 firstName
和 lastName
。
javascript
const createUser = ({ firstName, lastName, email }) => ({
firstName,
lastName,
email,
fullName() {
return `${this.firstName} ${this.lastName}`;
},
});
很棒!我们现在可以通过调用 createUser
方法来创建多个用户了。
工厂模式在创建复杂且可配置的对象时非常有用。我们经常会遇到这种情况:对象中的 key 和 value 都依赖于环境配置。通过工厂模式,我们可以轻松创建包含自定义 key-value 的对象。
javascript
const createObjectFromArray = ([key, value]) => ({
[key]: value,
});
createObjectFromArray(["name", "John"]); // { name: "John" }
优点
当我们需要创建很多具有相同属性的对象时,工厂模式会非常有用。一个工厂方法可以基于当前环境或者是用户自定义的配置来创建一个自定义的对象。
缺点
在 JavaScript 中,工厂模式只不过是一个不用 new
即可返回对象的函数。ES6 箭头函数 允许我们创建一个小的工厂函数,每次都可以隐式返回一个对象。
然而,在许多情况下,每次创建新实例(而不是创建新对象)可能更节省内存。
javascript
class User {
constructor(firstName, lastName, email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
const user1 = new User({
firstName: "John",
lastName: "Doe",
email: "john@doe.com",
});
const user2 = new User({
firstName: "Jane",
lastName: "Doe",
email: "jane@doe.com",
});
引用
- JavaScript ES6+ 工厂函数 - Eric Elliott