Паттерн SingleTon (одиночка) не позволяет создавать более одного экземпляра класса. В попытке получить второй экземпляр данного класса, возвращается первый объект.
Вот самый распространенный вариант исполнения шаблона SingleTon:
public sealed class MySingleton
{
static MySingleton myInstance = null;
MySingleton()
{
}
public static MySingleton MyInstance
{
get
{
if (myInstance == null)
{
myIinstance = new MySingleton();
}
return myInstance;
}
private set;
}
}
Как видим, конструктор закрыт, потому для создания объекта мы не можем воспользоваться конструктором. В противоположность этому, объект данного класса возможно получить вызвав открытое статическое свойство MyInstance, которое всегда возвращает существующий объект, или предварительно создает его в случае первого обращения.
страницы данный элемент. Для него сгенерируется похожий код:
Однако у этой модели есть слабое место и связано оно с кросспоточным обращением к свойству MyInstance.
Решением может быть следующий код (наиболее оптимальное решение):
public sealed class Singleton
{
static readonly Singleton myInstance =
new Singleton();
static Singleton() { }
Singleton() { }
public static Singleton MyInstance
{
get
{
return myInstance;
}
}
}
Иногда я встречал такую реализацию данного шаблона-одиночка:
public sealed class Singleton
{
Singleton()
{
}
public static Singleton MyInstance
{
get
{
return Chil.parInstance;
}
}
class Chil
{
static Chil() { }
internal static readonly Singleton parIinstance =
new Singleton();
}
}
Здесь, создается вложенный тип, имеющий закрытое поле, доступное только для чтения, представляющее экземпляр родительского типа.
Оценить статью:
Оценивая статью, Вы подсказываете нам насколько данная информация стала
полезной именно для Вас. Мы ожидаем, прежде всего, оценку доступности материала
для понимания и простоты его изложения. Дополнительные комментари, вопросы,
дополнения и замечания Вы можете указать на странице
От Вас
Частичное, или полное копирование материала данной
статьи возможно лишь при размещении ссылки на данную страницу.