2015-02-23 2 views
3

Я прочитал о шаблоне дизайна Flyweight и узнал, что он хранит объекты, которые могут использоваться совместно, чтобы сэкономить на использовании кучи. Кэш Java также сохраняет объекты, которые могут быть повторно использованы позже, чтобы сохранить память. Тогда какова реальная разница между шаблоном дизайна Flyweight и кешем java?В чем разница между шаблоном проектирования Flyweight и кэшем Java

ответ

2

Предположим, что «кэш Java» представляет собой пул объектов (или шаблон пула объектов).

Я думаю, что разница заключается в понимании кеширования объектов, которые являются одиночными или нет.

В шаблоне мухи вы используете тот же самый объект, полученный от «завода» потенциально несколькими клиентами. Для этого требуется другой способ управления материалом (например, параллелизм, работа с клиентом и т. Д.). Например, если вы получаете один и тот же самый мухомодный объект (скажем, кнопку) в нескольких клиентах/видах просмотра пользовательского интерфейса, которые одновременно видны, то вы в конечном итоге управляете одним и тем же объектом (например, текст кнопки), который может создавать несогласованность на этих разных пользовательских интерфейсах/видовых экранах. Этого не произойдет, поскольку пул/кеш будет возвращать вам отдельный объект каждый раз, когда вы запрашиваете объект.

Что касается неизменности, я обнаружил пару примеров в Интернете, которые включают внешнее/изменяющееся состояние в мухомором. Ну, я не думаю, что было бы неправильно включать его как часть летающего объекта, так как это уменьшает объем памяти, если вы можете правильно управлять объектами. Но я также думаю, что он полностью открыт для обсуждения.

4

Дизайн Flyweight обычно является хранилищем неизменяемых объектов.

«Кэш Java» не является четко определенным термином. Это может означать многие вещи, такие как кеш результатов или пул объектов ресурсов.

3

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

Теперь вы можете использовать кеширование для реализации шаблона Flyweight, но кеширование вообще не имеет никакого отношения к модели Flyweight как таковой. Идея кэширования имеет больший контекст в том, что полезно экономить ваши вычислительные ресурсы (CPU/Memory/Network) за счет повторного использования.

+0

Спасибо за ответ Шайлендра. Можете ли вы дать мне хороший пример, не используя кеш? –

+1

Взгляните на http://stackoverflow.com/questions/14425671/what-is-the-difference-between-intrinsic-and-extrinsic-state-as-described-in-fly?rq=1 – Shailendra

Смежные вопросы