Jump to content

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

UML-диаграмма мультитонны
UML-диаграмма мультитонны

В разработке программного обеспечения шаблон «многоэлемент» — это шаблон проектирования , который обобщает шаблон «одиночка» . В то время как синглтон позволяет создать только один экземпляр класса, шаблон мультитон допускает контролируемое создание нескольких экземпляров, которыми он управляет с помощью карты .

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

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

Описание

[ редактировать ]

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

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

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

Недостатки

[ редактировать ]

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

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

Реализации

[ редактировать ]

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

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

using System;
using System.Collections.Generic;

public enum MultitonType
{
    Zero,
    One,
    Two
}

public class Multiton
{
    private static readonly Dictionary<MultitonType, Multiton> instances =
        new Dictionary<MultitonType, Multiton>();

    private MultitonType type;

    private Multiton(MultitonType type)
    {
        this.type = type;
    }

    public static Multiton GetInstance(MultitonType type)
    {
        // Lazy init (not thread safe as written)
        // Recommend using Double Check Locking if needing thread safety
        if (!instances.TryGetValue(type, out var instance))
        {
            instance = new Multiton(type);

            instances.Add(type, instance);
        }

        return instance;
    }

    public override string ToString()
    {
        return "My type is " + this.type;
    }

    // Sample usage
    public static void Main()
    {
        var m0 = Multiton.GetInstance(MultitonType.Zero);
        var m1 = Multiton.GetInstance(MultitonType.One);
        var m2 = Multiton.GetInstance(MultitonType.Two);

        Console.WriteLine(m0);
        Console.WriteLine(m1);
        Console.WriteLine(m2);
    }
}
  1. ^ О'Дочерти, Майк (2005). Объектно-ориентированный анализ и проектирование: понимание разработки систем с помощью UML 2.0 . Чичестер: Уайли. п. 341. ИСБН  0470092408 .
  2. ^ Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения . Бостон, Массачусетс, Мюнхен: Аддисон-Уэсли. 2011. с. 130. ИСБН  0-201-63361-2 .
  3. ^ «Разговоры о чистом коде — глобальное состояние и синглтоны» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 1546ab2a19c6101c15b4dffde7c91a69__1719800100
URL1:https://arc.ask3.ru/arc/aa/15/69/1546ab2a19c6101c15b4dffde7c91a69.html
Заголовок, (Title) документа по адресу, URL1:
Multiton pattern - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)