Образец мухи - в чем смысл неразделенного конкретного экземпляра? - PullRequest
0 голосов
/ 11 июня 2018

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

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

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

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

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

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

0 голосов
/ 11 июня 2018

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

Пример:

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

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

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

...