Легковес — это структурный паттерн, который экономит память, благодаря разделению общего состояния, вынесенного в один объект, между множеством объектов.
Легковес позволяет экономить память, кешируя одинаковые данные, используемые в разных объектах.
В игре Counter-Strike Террористы и Контртеррористы имеют различные типы мундира. Для простоты допустим, что и Террористы, и Контртеррористы имеют по одному типу мундира. Объект «мундир» вписан в объект «игрок» следующим образом:
Ниже приведена структура игрока. Как видим, объект «мундир» вписан в структуру игрока:
Припустим, что у нас есть 5 Террористов и 5 Контртеррористов, то есть всего 10 игроков. Тогда мы имеем два возможных варианта создания мундиров:
Каждый из 10 объектов игроков создает отдельный объект мундира и встраивает его. Всего создается 10 объектов мундиров.
Мы создаем 2 объекта мундиров:
- Единый Объект Мундира Террориста – его будут использовать 5 Террористов.
- Единый Объект Мундира Контртеррориста – его будут использовать 5 Контртеррористов.
Как мы видим, в Подходе 1прийдется создать 10 объектов мундиров, тогда как в Подходе 2 мы создаем только 2 объекта. Второй подход – это суть паттерна проектирования Легковес. Два объекта мундиров, созданные нами, называют легковесными объектами.
Паттерн Легковес находит одинаковые элементы и создает легковесные объекты. Эти легковесные объекты (мундиры) в дальнейшем могут быть распространены между несколькими объектами (игроки). Такая практика значительно уменьшает количество объектов мундиров, а главное – даже если мы создадим больше игроков, им все равно будет достаточно только двух объектов мундиров.
Используя паттерн Легковес, мы сохраняем легковесные объекты в полях карты. Когда создаются другие объекты, разделяющие между собой легковесные объекты, легковесы загружаются из карты.
Теперь давайте подумаем над тем, какие части этой системы будут относиться к «внутреннему» или «внешнему состоянию»:
Внутреннее состояние: Мундир входит во внутреннее состояние, так как он используется несколькими объектами Террористов и Контртеррористов.
Внешнее состояние: Местонахождение и оружие игрока относятся ко внешнему состоянию, поскольку у каждого объекта они разные.
dressFactory.go: Фабрика легковесов
dress.go: Интерфейс легковеса
terroristDress.go: Конкретный легковесный объект
counterTerroristDress.go: Конкретный легковесный объект