Всем привет,

Как Вы все, я надеюсь:), заметили, Мы хотим сделать не только встречи нашей группы интересными, но и Наш блог! Потому Мы всячески придумываем новые рубрики чтобы Вам было интересно читать, обсуждать, получать новые знания!

Из своей практики общения с новичками, а иногда уже и старшими программистами, заметил, что многие не любят / не знают / не интересуются паттернами, потому во-вторник мы решили добавить ещё 1 рубркику : “Паттерн вторника”. Каждый вторник в этой рубрики будет обсуждаться один паттерн.

Итак, что ж такое паттерн, чтобы не писать объяснения просто заглянем в вики:
Паттерн (англ. pattern — образец, пример, принцип) — заимствованное слово. Слово «pattern» используется как термин в нескольких западных дисциплинах и технологиях, откуда оно и проникло в русскоязычную среду. Смысл термина «паттерн» всегда у́же чем просто «образец», и варьируется в зависимости от области знаний, в которой используется.

Паттерн (информатика) — эффективный способ решения характерных задач проектирования, в частности проектирования компьютерных программ.

Паттерны бывают трех типов:
Порождающие шаблоны(Creational patterns)
Структурные шаблоны(Structural Patterns)
Поведенческие шаблоны(Behavioral Patterns).

Так как рубрика вводная, сегодня мы поговорим про самый простой паттерн : порождающий паттерн Синглтон (Singleton ).

Особенности этого паттерна в том, что синглтон гарантирует, что будет создан только один экземпляр класса.

Собственно UML диаграмма простейшей реализации синглтона:

На самом деле всевозможных реализаций этого паттерна существует огромнейшее количество, линки на которые я приведу позже.

Простейшая реализация этого паттерна выглядит так:

/// 
/// The 'Singleton' class
///

class Singleton
{
private static Singleton _instance;

// Constructor is 'protected'
protected Singleton()
{
}

public static Singleton Instance()
{
// Uses lazy initialization.
// Note: this is not thread safe.
if (_instance == null)
{
_instance = new Singleton();
}

return _instance;
}
}

Пример взят из книги “Gangs of Four”, да и диграмма тоже:)

Как видно из примера, мы не можем напрямую вызывать конструктор класса, для этого у нас есть статический метод Instance().
В жизни пример использовать не стоит, потому как если у вас есть несколько потоков, которые захотят дернуть ваш синглтон – все рухнет:)

Где можна применять такой объект: логирование, хранение настроек, и т.д и т.п.

Ссылки на разнообразные реализации синглтона:
http://www.dofactory.com/Patterns/PatternSingleton.aspx#csharp
http://www.yoda.arachsys.com/csharp/singleton.html
http://blog.magenic.com/blogs/jamesa/archive/2009/10/01/A-Lazier-Singleton-with-.NET-4.0.aspx

С уважением,
-Дима