跳至主要内容

[GoF] 工廠模式 Factory

Factory Pattern @ patterns.dev

Factory Pattern 的概念

Factory Pattern 一句話來說,就是用 factory function 來建立物件。

在 JavaScript 中,factory function 是指任何不需要透過 new 就能回傳物件的函式,也就是說它不是 class 或 constructors。

透過 factory function,可以產生許多帶有相同屬性、預設值的物件:

const createUser = ({ userName = 'Anonyumous', avatar = 'https://i.pravatar.cc/300' }) => ({
userName,
avatar,
setUserName(userName) {
this.userName = userName;
return this;
},
});

const aaron = createUser({
// userName: 'aaron',
// avatar: 'https://github.com/pjchender.png',
});

console.log({
aaron,
});

Pros

當我們需要建立許多帶有相同屬性的物件時,factory pattern 還蠻好用的。

Cons

在許多情況下,比起每次都建立新的物件,使用 class 來建立新的實例(instance)在記憶體使用上會更有效率,特別是在物件裡用方法(method)時,讓所有的物件都能繼承相同的方法,比起讓每個物件都需要各自帶有該方法會能夠更有效率的使用記憶體。