stringtranslate.com

Многотонный узор

UML-диаграмма многотонного
UML-диаграмма многотонного

В программной инженерии шаблон multiton является шаблоном проектирования , который обобщает шаблон singleton . В то время как singleton позволяет создать только один экземпляр класса, шаблон multiton позволяет контролируемое создание нескольких экземпляров, которым он управляет с помощью map .

Вместо того чтобы иметь один экземпляр на приложение (например, java.lang.Runtimeобъект в языке программирования Java ), шаблон multiton обеспечивает один экземпляр на ключ .

Шаблон «Мультитоны» явно не появляется как шаблон в высоко оцененном учебнике по объектно-ориентированному программированию « Шаблоны проектирования» . [1] Однако в книге описывается использование реестра синглтонов для создания подклассов синглтонов, [2] что по сути является шаблоном «Мультитоны». [ требуется ссылка ]

Описание

Хотя может показаться, что multiton — это хэш-таблица с синхронизированным доступом, есть два важных отличия. Во-первых, multiton не позволяет клиентам добавлять сопоставления. Во-вторых, multiton никогда не возвращает нулевую или пустую ссылку; вместо этого он создает и сохраняет экземпляр multiton при первом запросе с соответствующим ключом. Последующие запросы с тем же ключом возвращают исходный экземпляр. Хэш-таблица — это всего лишь деталь реализации, а не единственный возможный подход. Шаблон упрощает извлечение общих объектов в приложении.

Поскольку пул объектов создается только один раз, являясь членом, связанным с классом (а не экземпляром), мультитон сохраняет свое плоское поведение, а не превращается в древовидную структуру .

Multiton уникален тем, что он обеспечивает централизованный доступ к единому каталогу (т. е. все ключи находятся в одном пространстве имен, по сути ) multiton, где каждый экземпляр multiton в пуле может существовать, имея свое собственное состояние . Таким образом, шаблон выступает за индексированное хранение важных объектов для системы (например, такое, которое будет предоставлено системой LDAP ). Однако multiton ограничен широким использованием одной системы, а не множеством распределенных систем.

Недостатки

Этот шаблон, как и шаблон Singleton , значительно затрудняет модульное тестирование [3], поскольку он вводит глобальное состояние в приложение.

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

Реализации

В Java шаблон multiton может быть реализован с использованием перечислимого типа , со значениями типа, соответствующими экземплярам. В случае перечислимого типа с одним значением это дает шаблон singleton.

В C# мы также можем использовать перечисления, как показано в следующем примере:

с использованием Системы ; с использованием System.Collections.Generic ; публичное перечисление MultitonType  { Ноль , Один , Два}общественный класс Multiton  { частный статический словарь только для чтения < MultitonType , Multiton > экземпляры =       новый Словарь < MultitonType , Multiton > ();   частный тип MultitonType ;   частный Multiton ( тип MultitonType )   { этот . тип = тип ;   } публичный статический Multiton GetInstance ( тип MultitonType )     { // Ленивая инициализация (не потокобезопасна, как написано) // Рекомендуем использовать Double Check Locking, если нужна потокобезопасность если ( ! instances.TryGetValue ( type , out var instance ) )     { экземпляр = новый Мультитон ( тип );    экземпляры . Добавить ( тип , экземпляр );  } возвратить экземпляр ;  } публичная переопределенная строка ToString ()    { return "Мой тип - " + this . type ;    } // Пример использования публичный статический void Main ()    { var m0 = Multiton.GetInstance ( MultitonType.Zero ) ;    var m1 = Multiton.GetInstance ( MultitonType.One ) ;    var m2 = Multiton.GetInstance ( MultitonType.Two ) ;    Консоль.WriteLine ( m0 ) ; Консоль.WriteLine ( m1 ) ; Консоль.WriteLine ( m2 ) ; }}

Ссылки

  1. ^ О'Дочерти, Майк (2005). Объектно-ориентированный анализ и проектирование: понимание разработки систем с помощью UML 2.0 . Чичестер: Wiley. стр. 341. ISBN 0470092408.
  2. ^ Шаблоны проектирования: элементы повторно используемого объектно-ориентированного программного обеспечения . Бостон, Массачусетс. Мюнхен: Addison-Wesley. 2011. стр. 130. ISBN 0-201-63361-2.
  3. ^ «Разговоры о чистом коде — глобальное состояние и синглтоны».

Внешние ссылки