Как мы все знаем, на UML-диаграмме паттерна «Легковес» есть неразделенный конкретный экземпляр, и он реализует «легковес» интерфейса. Мой вопрос в том, зачем ему это реализовывать, если его внешнее состояние бессмысленно? Я имею в виду, что для общих конкретных экземпляров интерфейс необходим, поэтому вы должны быть уверены, что внешнее состояние может быть передано, но как насчет неразделенного? Разве мы не можем легко не реализовать интерфейс и не достичь тех же результатов?


Расширение интерфейса Flyweight дает возможность отделить клиента от реализации паттерна flyweight.
Пример:
Для «Глифов» реализован шаблон «Легковес». Согласно UML шаблона, «Глиф» представляет базовый класс или интерфейс «Легковеса». «Клиент» работает с набором глифов. FlyweightFactory (здесь GlyphFactory) может создавать глифы (обычно экземпляры объекта SharedFlyWeightGlyph), используя шаблон flyweight.
Клиент, вероятно, хранит текст как набор глифов.
Теперь предположим, что рядом с обычными глифами вы хотите использовать несколько пользовательских глифов, которые не могут быть созданы FlyWeightFactory. Расширяя интерфейс «Glyph» (который является UnsharedFlyweight в соответствии с UML-диаграммой шаблона), у вас есть возможность использовать настраиваемые глифы, хотя в этих случаях преимущества в производительности шаблона-легковеса не могут быть использованы.
У неразделенного конкретного экземпляра нет данных внутренний для совместного использования, но он может использовать «данные» внешний для создания своих выходных данных, поэтому он реализует тот же интерфейс.
Основная цель этого шаблона - сэкономить место для хранения, эффективно используя большое количество объектов.
Внутреннее состояние инвариантно (не зависит от контекста) и поэтому может использоваться совместно. Внешнее состояние является вариантным (зависит от контекста) и поэтому не может быть передано другим пользователям.
Пример из карточек. Мы должны отслеживать большое количество раздач и их результаты; контекст - это рука, общие экземпляры - стандартные карты, а неразделенные объекты - джокеры. Вывод метода points () стандартной карты зависит от ее внутренних данных (набор и ранг) и от руки. Количество очков () джокера зависит от руки и от конкретного выбора, который не является ни внутренним, ни внешним.