
Диаграмма классов
Одиночка
Описание
Паттерн одиночка гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
Преимущества
Контролируемый доступ к единственному экземпляру
Недостатки
Глобальные объекты могут быть вредны для объектного программирования, в некоторых случаях приводя к созданию не масштабируемого проекта.
Усложняет написание модульных тестов и следование TDD
Детали реализации
public class Singleton
{
private static readonly object SyncRoot = new object();
private static Singleton _instance;
private Singleton(){}
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock (SyncRoot)
{
if (_instance == null)
{
Console.WriteLine("Создание объекта");
_instance = new Singleton();
}
}
}
Console.WriteLine("Возвращение объекта");
return _instance;
}
}
}
Диаграмма классов
Мультитон
Описание
Гарантирует, что класс имеет поименованные экземпляры объекта и обеспечивает глобальную точку доступа к ним
Преимущества
Применение шаблона позволяет достичь того же эффекта, что и применение паттерна одиночка, но может использоваться как с жестко заданным списком экземпляров, так и с созданием по требованию.
Недостатки
Минусом шаблона является возможность появления большого числа зависимых от него частей приложения.
Детали реализации
public class Multiton
{
private static readonly Dictionary<object, Multiton> Instances = new Dictionary<object, Multiton>();
private Multiton() {}
public static Multiton GetInstance(object key)
{
lock (Instances)
{
Multiton instance;
if (!Instances.TryGetValue(key, out instance))
{
Console.WriteLine("Создаем объект:" + key);
instance = new Multiton();
Instances.Add(key, instance);
}
Console.WriteLine("Возвращаем объект: " + key);
return instance;
}
}
}
Диаграмма классов
Литература
http://wikipedia.org
Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес Приемы объектно-ориентированного проектирования. Паттерны проектирования
http://msdn.microsoft.com/