Шаблон Одиночка в реализации AOP

Любое больше дело лучше начинать с чего-то простого, чтобы простой войти во вкус. Я считаю, что рассмотрение реализации всех шаблонов с помощью Аспектно-Ориентированного Подхода (АОП) лучше всего начать с шаблона Singleton – как самого простого в понимании. В этой статье я не буду затрагивать вопросы в чем хорош шаблон, в чем плох, почему некоторые считают, что это уже анти-шаблон, который уже совсем не стоит использовать в чистом виде как есть. Всю эту информацию можно сравнительно легко найти на просторах интернета. Я же хочу посмотреть, как будет отличаться реализация шаблона в АОП стиле от, скажем так, классической.

Для реализации шаблона в АОП стиле я буду использовать коммерческий продукт PostSharp. Скорее всего описанные подходы вы сможете использовать и с другими АОП фреймворками, просто это будет чуть более многословное и не столь удобное в вопросе продолжительного использования.

Помимо моих собственных предпочтений и давнего знакомства с фреймворком, я хочу отметить следующие его качества, которые значительно помогут при использовании конечного кода в реальных продуктах:

  • Проверка правильности шаблона с точки зрения дизайна. За это отвечает архитектурный фреймворк в составе PostSharp.
  • Легкая работа с многопоточными моделями. Это важно в контексте создания объекта Одиночки.
  • Легкая навигация и подсветка используемых аспектов в самой Visual Studio.

 

Общая информация

Для полноты картины, я считаю, что надо снова привести основные характеристики и назначение шаблона.

Намерение

Лучше, когда некоторые объекты представлены только в одном экземпляре, для того, чтобы избежать путаницы и хаоса. Например, единая бухгалтерская книга, правительство, спулер принтеров. Когда таких объектов больше одного, то могут и часто возникают неприятные ситуации, которые ведут к нарушению целостности данных, трудностям с понимании логики работы в run-time.

Суть

В системе может существовать только один экземпляр класса, доступ к которому осуществляется через глобальную точку доступа

Реализация

Каноническая реализация говорит о следующих особенностях реализации шаблона:

  • Все конструкторы должны быть приватными.
  • Доступ к объекту осуществляется через статическое поле.
  • Объект создается в момент первого обращения и в дальнейшем отдается один и тот же объект.

Вот в целом и все нехитрые особенности реализации. В UML нотации шаблон выглядит следующим образом:

singleton

Подробнее