Легковес — это структурный паттерн, который экономит память, благодаря разделению общего состояния, вынесенного в один объект, между множеством объектов.
Легковес позволяет экономить память, кешируя одинаковые данные, используемые в разных объектах.
Применимость: Весь смысл использования Легковеса — в экономии памяти. Поэтому, если в приложении нет такой проблемы, то вы вряд ли найдёте там примеры Легковеса.
Признаки применения паттерна: Легковес можно определить по создающим методам класса, которые возвращают закешированные объекты, вместо создания новых.
Отрисовка леса
В этом примере мы создадим и нарисуем лес (1.000.000 деревьев)! Каждому дереву соответствует свой объект, имеющий некоторое состояние (координаты, текстура и прочее). Такая программа хоть и работает, но ест слишком много памяти.
Много деревьев имеют одинаковые свойства (название, текстуру, цвет). Потому мы можем применить паттерн Легковес и закешировать эти свойства в отдельных объектах TreeType. Теперь вместо хранения этих данных в миллионах объектов деревьев Tree, мы будем ссылаться на один из нескольких объектов-легковесов.
Клиенту даже необязательно знать обо всём этом. Фабрика легковесов TreeType сама позаботится о создании нового типа дерева, если будет запрошено дерево с какими-то уникальными параметрами.
trees
trees/Tree.java: Объект, содержащий уникальное состояние дерева
trees/TreeType.java: Легковес, имеющий общее состояние нескольких деревьев
trees/TreeFactory.java: Фабрика деревьев
forest
forest/Forest.java: GUI-лес, который рисует деревья