home | login | register | DMCA | contacts | help | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


my bookshelf | genres | recommend | rating of books | rating of authors | reviews | new | форум | collections | читалки | авторам | add
fantasy
space fantasy
fantasy is horrors
heroic
prose
  military
  child
  russian
detective
  action
  child
  ironical
  historical
  political
western
adventure
adventure (child)
child's stories
love
religion
antique
Scientific literature
biography
business
home pets
animals
art
history
computers
linguistics
mathematics
religion
home_garden
sport
technique
publicism
philosophy
chemistry
close

Loading...


«Одиночка»

Паттерн Singleton гарантирует, что объект какого-то класса будет создан только один раз. Это, пожалуй, самый спорный из всех шаблонов проектирования. Многие профессионалы объектно-ориентированного проектирования не рекомендуют применять этот паттерн, поскольку считают его обычным аналогом глобальных переменных. Самая простая реализация паттерна Singleton – это так называемый «синглтон Мейерса», где «Одиночка» представляет собой статический локальный объект (это решение небезопасно при работе с нитями).

template class Singleton

{

public:

static T& instance()

{

// у класса T есть конструктор по умолчанию

static T theSingleInstance;

return theSingleInstance;

}

};

Чтобы класс стал «Одиночкой», его достаточно породить от Singleton.

Обычно всякие фабрики и контейнеры должны присутствовать в системе в единственном экземпляре, поэтому их разумно порождать от Singleton. Расширим класс CarFactory из предыдущего примера.

class CarFactory: public Singleton

{

... дальше то же, что и в CarFactory из паттерна «Прототип»

};

Все обращения к такому объекту ведутся через метод Instance(). Для создания автомобилей по названию нужно просто написать следующий код.

Car* bmw = CarFactory::instance(). create(«BMW5»);

Car* hiace = CarFactory::instance(). create(«ToyotaHiace»);

При этом объект типа CarFactory фактически будет создан в момент первого вызова метода instance(), а удален только при выходе из программы.

Итак, мы рассмотрели в этой статье первую группу классических паттернов – «Порождающие». Их нужно знать и понимать очень хорошо, они встречаются наиболее часто, ведь создание объектов – неотъемлемая часть любого алгоритма.

Продолжение следует.


«Прототип» | Журнал PC Magazine/Russian Edition #01/2009 | Обезопасим себя откражи личной информации Мэттью Д. Саррел







Loading...