Редуктор использования памяти.
_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 должен убедиться, что вы хорошо защищаете свои внутренние части, поскольку они используют один и тот же адрес памяти.