Приспособленец — это структурный паттерн проектирования, который позволяет экономить память за счёт разделения состояния между несколькими объектами. Он применяется, когда в приложении много однотипных объектов, и большая их часть имеет одинаковое состояние.
Паттерн разделяет состояние объекта на две части:
- Внутреннее состояние (Intrinsic State): Состояние, общее для всех объектов и не зависящее от их контекста. Оно хранится внутри Приспособленца и разделяется между многими клиентами.
- Внешнее состояние (Extrinsic State): Состояние, зависящее от контекста использования объекта. Оно передаётся клиентом в методы Приспособленца по мере необходимости.
Основные компоненты паттерна:
- Flyweight (Приспособленец): Интерфейс или абстрактный класс, объявляющий методы, которые принимают внешнее состояние в качестве параметра.
- ConcreteFlyweight (Конкретный Приспособленец): Класс, реализующий интерфейс Flyweight и хранящий внутреннее состояние.
- FlyweightFactory (Фабрика Приспособленцев): Класс, управляющий созданием и кешированием объектов ConcreteFlyweight. Он проверяет, существует ли уже Приспособленец с заданным внутренним состоянием, и возвращает его, либо создает новый.
- Client (Клиент): Объект, использующий Приспособленцев, который хранит внешнее состояние и вызывает методы Приспособленцев, передавая это состояние.
Пример использования: текстовый редактор. Символы (буквы, цифры) могут быть Приспособленцами. Внутреннее состояние символа - это сам символ (например, 'A'). Внешнее состояние - это его позиция, цвет, размер шрифта. Вместо создания нового объекта для каждого символа в документе, создается только один объект
Приспособленец — это структурный паттерн проектирования, который позволяет экономить память за счёт разделения состояния между несколькими объектами. Он применяется, когда в приложении много однотипных объектов, и большая их часть имеет одинаковое состояние.
Паттерн разделяет состояние объекта на две части:
- Внутреннее состояние (Intrinsic State): Состояние, общее для всех объектов и не зависящее от их контекста. Оно хранится внутри Приспособленца и разделяется между многими клиентами.
- Внешнее состояние (Extrinsic State): Состояние, зависящее от контекста использования объекта. Оно передаётся клиентом в методы Приспособленца по мере необходимости.
Основные компоненты паттерна:
- Flyweight (Приспособленец): Интерфейс или абстрактный класс, объявляющий методы, которые принимают внешнее состояние в качестве параметра.
- ConcreteFlyweight (Конкретный Приспособленец): Класс, реализующий интерфейс Flyweight и хранящий внутреннее состояние.
- FlyweightFactory (Фабрика Приспособленцев): Класс, управляющий созданием и кешированием объектов ConcreteFlyweight. Он проверяет, существует ли уже Приспособленец с заданным внутренним состоянием, и возвращает его, либо создает новый.
- Client (Клиент): Объект, использующий Приспособленцев, который хранит внешнее состояние и вызывает методы Приспособленцев, передавая это состояние.
Пример использования: текстовый редактор. Символы (буквы, цифры) могут быть Приспособленцами. Внутреннее состояние символа - это сам символ (например, 'A'). Внешнее состояние - это его позиция, цвет, размер шрифта. Вместо создания нового объекта для каждого символа в документе, создается только один объект