Подтвердить что ты не робот

Каковы различия в практическом использовании моделей Flyweight vs Singleton?

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

4b9b3361

Ответ 1

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

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

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

Примеры из Cocoa (Objective-C):

UIApplication.sharedApplication.statusBarHidden = YES

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

UIColor *red = [UIColor redColor]

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

Ответ 2

Вес "мухи" - это когда у вас много разных видов.

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

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

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

Ответ 3

Они не связаны:

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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