Русская Википедия:Мультитон (шаблон проектирования)

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Нет ссылок

Файл:Multiton.svg
UML-диаграмма многотона

Мультитон (англ. multiton) — порождающий шаблон проектирования, который обобщает шаблон "Одиночка". В то время, как "Одиночка" разрешает создание лишь одного экземпляра класса, мультитон позволяет создавать несколько экземпляров, которые управляются через ассоциативный массив. Создаётся лишь один экземпляр для каждого из ключей ассоциативного массива, что позволяет контролировать уникальность объекта по какому-либо признаку.

Примеры реализации

C#:

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 int number;

    private Multiton(int number) {
        this.number = number;
    }

    public static Multiton GetInstance(MultitonType type) {
        // lazy init (not thread safe as written)
        // Recommend using Double Check Locking if needing thread safety
        if (!instances.ContainsKey(type)) {
            instances.Add(type, new Multiton((int)type));
        }
        return instances[type];
    }
    
    public override string ToString() {
        return "My number is " + number.ToString();
    }
    
    // Sample usage
    public static void Main(string[] args) {
        Multiton m0 = Multiton.GetInstance(MultitonType.ZERO);
        Multiton m1 = Multiton.GetInstance(MultitonType.ONE);
        Multiton m2 = Multiton.GetInstance(MultitonType.TWO);
        System.Console.WriteLine(m0);
        System.Console.WriteLine(m1);
        System.Console.WriteLine(m2);
    }
}

Примечания

Шаблон:Примечания Шаблон:Типы шаблонов проектирования