Декоратор (шаблон проектирования)
- 1 year ago
- 0
- 0
Мультитон (англ. 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);
}
}