Редуктор использования памяти.

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