Каковы практические различия между шаблонами Flyweight и Singleton?

Две модели, кажется, достигают одного и того же. Каковы различные варианты использования в реальном мире? Спасибо

 Bergi25 мая 2013 г., 17:14
Какие "вещь" Как вы думаете, они должны достичь? Шаблоны выглядят совсем по-другому для меня.
 jxh25 мая 2013 г., 16:59
Когда я думаю о Синглтоне, я думаю оглобальная переменная ", Когда я думаю о Flyweight, я думаю оуказатель".
 user39576025 мая 2013 г., 17:25
Это неверно. Посмотрите на шаблон в полете в Википедии, там может быть любое количество объектов в полусреднем весе. Часто шаблон «легкий вес» используется специально, потому что там будет необычайно много объектов.
 Jayan25 мая 2013 г., 17:13
Они не достигают того же самого.
 Kuzey25 мая 2013 г., 17:16
Кажется, что оба используются, чтобы иметь только один экземпляр объекта во время выполнения.
 Kuzey25 мая 2013 г., 20:28
Как я понял из ответов здесь, да, может быть много объектов, но все они будут указывать на один и тот же экземпляр, нет? И в синглтоне один экземпляр и одна ссылка на него. Плюс синглтон неизменен.

Ответы на вопрос(7)

Решение Вопроса

легкий вес может представлять цвет. Это может сбить с толку, если вы создадите красный цвет, а вместо этого он будет зеленым, потому что лежащий в его основе объект с облегченным весом был изменен на зеленый где-то еще в коде.

Кроме того, я бы сказал, что синглтон является своего рода подкатегорией веса в полете. Вы можете подумать, что отдельные цветные объекты являются одиночными, но все они являются частью системы, в которой вы используете фабрику для выбора правильного одноэлементного / летучего объекта.

Это действительно много о предвзятости. Flyweights не представляются пользователю API, как будто они являются уникальными объектами, в то время как синглтоны.

Примеры из какао (Objective-C):

UIApplication.sharedApplication.statusBarHidden = YES

Это, очевидно, один объект, и вы можете изменить его состояние.

UIColor *red = [UIColor redColor]

Пользователю не нужно знать, является ли красный синглтоном или нет, потому что он неизменен. Вы можете'изменить цвет объектов после их создания. Поэтому для пользователя не имеет практического значения, являются ли они одиночками или вы создаете новые объекты. Таким образом, имеет больше смысла называть это наименьшим весом. Это все о намерении.

 Jayan25 мая 2013 г., 17:13
+1. Mutable. это ключ.
 Tim Pote25 мая 2013 г., 17:25
@Jayan Как ключ изменчивости? Я'Мы видели и сделали много синглетонов, которые неизменны. Например, фабрики или контейнеры с недвижимостью. Это хороший ответ, и это может быть справедливым практическим правилом, но есть много причин для использования неизменного синглтона.
 Pedro Loureiro25 мая 2013 г., 17:32
Если вы читаете объяснение веса в википедии, описание очень сильно отличается от того, что вы здесь описываете. ИМО, они совершенно не связаны.en.wikipedia.org/wiki/Flyweight_pattern
 Adam Smith25 мая 2013 г., 20:39
@PedroLoureiro Мое описание совсем другое, но я не говорю ничего против того, что говорит вики. Помните, я не отвечаю, что такое надувной вес. Я отвечаю, чем они отличаются от синглетонов. Поэтому я выбрал другой угол, чем вики, подчеркивая разные аспекты.
 kmote20 сент. 2013 г., 23:39
Если я правильно понимаю: Flyweight - это неизменный синглтон.

много разных видов одной вещи.

Синглтон - это когда у тебя есть одна вещь.

Например, вы можете использовать шаблон Flyweight для представления символов клавиатуры. Один объект дляaодин дляbи т.д. Они оба персонажи, но разныевиды персонажей.

Напротив, вы могли бы использовать синглтон для представления клавиатуры. Может быть только один.

 Mohammed Ramadan10 мар. 2019 г., 23:25
мне очень нравится этот ответ :)

structual Шаблон по существу удаляет дублирование объектов, необходимых для достижения определенной цели. Например, представьте, что вы печатаете эссе (или, возможно, сообщение о переполнении стека), которое в конечном итоге состоит из одних и тех же 26 букв алфавита (английского), которые повторяются много раз. Было бы более эффективно иметь 1000 отдельных объектов, каждый из которых представляет букву «E»или иметь один единственный объект, представляющий букву 'E'ссылались 1000 раз? (Подсказка, это вообще будет последнее)

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

Инициализируйте пустую коллекцию символов.Буква "Е" нужно?Если он уже существует, извлеките этот объект из коллекции, в противном случае создайте новую букву «E». и сохраните его в коллекции для повторного использования в следующий раз.

Делается ли это через полноценный одноэлементный объект или просто личную переменную, к которой имеет доступ только метод фабрики? Может или не может быть. Но в любом случае, шаблон синглтона являетсяТворения шаблон, описывающий способы иметь только один экземпляр объекта, существующий в любой данный момент времени, и не касается конкретных случаев использования, таких как "устранение дублирования объектов, необходимых для достижения определенной цели ».

Flyweight повторно использует (очевидно неизменяемые) экземпляры класса везде, где это возможно, вместо создания новых экземпляров класса с тем же "значение", который экономит процессор и память.

Синглтон - это когда существует только один экземпляр (обычно изменяемый) класса. Он часто используется в многопоточных средах для упрощения всех потоков, используя один экземпляр и "видя» то же состояние.

 Tim Pote25 мая 2013 г., 17:20
Воу, воу, воу. Сказать "этодовольно часто используемый" а также "Это использовано" это две совершенно разные вещи. Есть много причин, кроме многопоточности, чтобы использовать синглтон. Например, для какой-то дорогой операции, которую вы хотите выполнить только один раз.
 Bohemian25 мая 2013 г., 17:22
@TimPote Отлично. "довольно часто" был добавлен.

Типы», Синглтон это "СОЗДАНИЕ" шаблон. Шаблоны создания - это более высокий порядокСоздание объекта " методологии. С другой стороны, Flyweight это "Структурный рисунок », Структурные шаблоны должны делать больше с интерфейсами и реализацией, а не "создание объекта ", Еще один более простой способ описать различия - это первый тип шаблонаСоздание моделей " больше основаны на существительном. Второй "Структурный рисунок » типы основаны на глаголах.

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

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

 Michael Barber22 дек. 2017 г., 17:41
Именно так. Извини я неЯ не вижу этот ответ, когда я опубликовал свой, но я расширил ваш ответ.

Ваш ответ на вопрос