Найти в Дзене
using Dev

Легковес C#

Оглавление

Легковес – это структурный паттерн проектирования, который позволяет вместить бóльшее количество объектов в отведённую оперативную память. Легковес экономит память, разделяя общее состояние объектов между собой, вместо хранения одинаковых данных в каждом объекте.

Паттерн "Легковес" (Flyweight) предназначен для оптимизации использования памяти при работе с большим количеством мелких объектов, которые могут быть сгруппированы по определенным характеристикам. Это достигается за счет разделения внутреннего и внешнего состояния объектов. Внутреннее состояние (общее для группы объектов) хранится в легковесных объектах, а внешнее (уникальное для каждого объекта) - в клиентском коде. Это позволяет существенно сократить количество объектов, необходимых для работы, и снизить потребление памяти.

Схожие шаблоны и их отличия

  • Декоратор (Decorator): Оба паттерна используют композицию для расширения функциональности объектов, но в то время как Декоратор добавляет или изменяет поведение объектов динамически, Легковес фокусируется на оптимизации использования памяти за счет разделения состояния объектов.
  • Одиночка (Singleton): Оба паттерна контролируют создание объектов, но Легковес позволяет создавать множество легковесных объектов, которые разделяют общую часть состояния, в то время как Одиночка гарантирует, что существует только один экземпляр класса.

Реализация шаблона в общем виде

  1. Интерфейс Flyweight определяет методы для доступа к внутреннему и внешнему состоянию объекта.
  2. Конкретный Flyweight реализует интерфейс Flyweight, храня в себе часть внутреннего состояния и делегируя доступ к внешнему состоянию клиенту.
  3. Фабрика Flyweight (Flyweight Factory) управляет созданием и повторным использованием объектов Flyweight. Она определяет, какие объекты Flyweight уже существуют, и возвращает существующий объект, если он соответствует запросу, или создает новый объект в противном случае.
  4. Клиент (Client) использует объекты Flyweight, не зная о их внутренней реализации, и хранит внешнее состояние, передавая его в объекты Flyweight при необходимости.

Пример

Рассмотрим применение паттерна на примере учета представителей разных компаний, которые приехали на конференцию по IT.

Выделим в структуру Shared общие свойства представителей.

-2

По аналогии создадим структуру Unique, содержащюю уникальные свойства, которые нет необходимости сохранять в области памяти с повторяющимися значениями.

-3

Создадим класс легковес.

-4

Создадим фабрику легковесов в которой будут храниться и накапливаться общие данные на представителей компании.

-5

Посмотрим применение.

-6

Результат.

-7

Наука
7 млн интересуются