Шаблон легковеса - в чем смысл неразделенного конкретного экземпляра?

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

Повышение качества Laravel с помощью принципов SOLID: Лучшие практики и примеры
Повышение качества Laravel с помощью принципов SOLID: Лучшие практики и примеры
Когда мы говорим о том, как сделать следующий шаг в качестве разработчика, мы должны понимать, что качество кода всегда является основным фокусом на...
Принципы SOLID - лучшие практики
Принципы SOLID - лучшие практики
SOLID - это аббревиатура, обозначающая пять ключевых принципов проектирования: принцип единой ответственности, принцип "открыто-закрыто", принцип...
1
0
641
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Расширение интерфейса Flyweight дает возможность отделить клиента от реализации паттерна flyweight.

Пример:

Для «Глифов» реализован шаблон «Легковес». Согласно UML шаблона, «Глиф» представляет базовый класс или интерфейс «Легковеса». «Клиент» работает с набором глифов. FlyweightFactory (здесь GlyphFactory) может создавать глифы (обычно экземпляры объекта SharedFlyWeightGlyph), используя шаблон flyweight.

Клиент, вероятно, хранит текст как набор глифов.

Теперь предположим, что рядом с обычными глифами вы хотите использовать несколько пользовательских глифов, которые не могут быть созданы FlyWeightFactory. Расширяя интерфейс «Glyph» (который является UnsharedFlyweight в соответствии с UML-диаграммой шаблона), у вас есть возможность использовать настраиваемые глифы, хотя в этих случаях преимущества в производительности шаблона-легковеса не могут быть использованы.

У неразделенного конкретного экземпляра нет данных внутренний для совместного использования, но он может использовать «данные» внешний для создания своих выходных данных, поэтому он реализует тот же интерфейс.

Основная цель этого шаблона - сэкономить место для хранения, эффективно используя большое количество объектов.

Внутреннее состояние инвариантно (не зависит от контекста) и поэтому может использоваться совместно. Внешнее состояние является вариантным (зависит от контекста) и поэтому не может быть передано другим пользователям.

Пример из карточек. Мы должны отслеживать большое количество раздач и их результаты; контекст - это рука, общие экземпляры - стандартные карты, а неразделенные объекты - джокеры. Вывод метода points () стандартной карты зависит от ее внутренних данных (набор и ранг) и от руки. Количество очков () джокера зависит от руки и от конкретного выбора, который не является ни внутренним, ни внешним.

Другие вопросы по теме