В статье не хватает ссылок на источники (см. рекомендации по поиску). |
Мультитон (англ. 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);
}
}