Редуктор использования памяти.
_00 / Концепция
Отсортируйте одни и те же детали и используйте их повторно. Например, представьте, что вам нужно создать много экземпляров. Если бы вы могли позволить одинаковым состояниям указывать на один и тот же адрес памяти, это было бы очень полезно!
_01 / Ключевые роли
Одни и те же части мы называем внутренними, а другие — внешними. При создании экземпляра мы извлекаем одни и те же свойства и повторно используем их вместо создания нового. В следующем примере мы используем хэш-карту для экономии памяти.
// intrinsic: face
class Face {
static map = {}
constructor(eyes, mouth) {
...
}
static getFace(eyes, mouth) {
const key = `${eyes}_${mouth}`
if (Face.map[key]){
return Face.map[key]
} else {
Face.map[key] = new Face(eyes, mouth)
return Face.map[key]
}
}
}
// extrinsic: name
class Lego {
name: string
face: Face
constructor(name, eyes, mouth) {
this.name = name
this.face = Face.getFace(eyes, mouth)
}
...
}
// client
const legoAlice = new Lego('Alice', 'Charming', 'Luscious')
const legoBob = new Lego('Bob', 'Charming', 'Big')
const legoCarol = new Lego('Carol', 'Shinning', 'Plump')
const legoDave = new Lego('Dave', 'Charming', 'Big')
...
_02 / Компромиссы
🟢 Уменьшите использование памяти.
🔴 Got должен убедиться, что вы хорошо защищаете свои внутренние части, поскольку они используют один и тот же адрес памяти.