Мультитон (шаблон проектирования)

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

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

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

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);
    }
}

Примечания

    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.