Дмитрий Федоров - Примеры использования Паттерн Singleton (Одиночка)
Название: | Примеры использования Паттерн Singleton (Одиночка) | |
Автор: | Дмитрий Федоров | |
Жанр: | Другие языки и системы программирования | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | - | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Примеры использования Паттерн Singleton (Одиночка)"
Аннотация к этой книге отсутствует.
Читаем онлайн "Примеры использования Паттерн Singleton (Одиночка)". [Страница - 4]
6. Если используется параметризированная версия Singleton, то в производных классах следует объявить базовый класс (Singleton) дружественным.
Литература
1. http://www.firststeps.ru/theory/c/r.php?292. http://ooad.asf.ru/patterns/patterninfo.asp?ID=13
3. Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес “Приемы объектно-ориентированного проектирования. Паттерны проектирования”
Комментарии:
Как бы так это заделать???
Во первых, статья очень хорошая и полезная, спасибо. Применил в реальной программе я этот сингелтон и остался очень доволен. Но мне надо было несколько изменить поведение исходного класса. У меня ситуация такая: есть клиент, который шлёт запросы на сервер, на сервере есть класс, который создаёт и хранит необходимые для обработки этих запросов таблицы. Но беда в том, что после обработки очередного запроса мне не надо уничтожать объект, т.к. эти запросы идут сериями по многу штук подряд, а удалять объект надо в конце серии... Я сделал во что:
template <class T>T* Singleton<T>::Instance()
{
if(!_self)
{
_self=new T;
_refcount++; // вот это
}
_refcount++;
return _self;
}
Но выглядит на мой взгляд коряво. Может есть какие-то паттерны на этот случай?Ну, в довесок хочу воткнуть так вот полу-смарт указатель:
template<class T>class TSingeltonPtr
{
T *_t;
public:
TSingeltonPtr() { _t = T::Instance(); }
~TSingeltonPtr() { if(_t) _t->FreeInst(); }
operator T*() { return _t; }
T* operator->() { return _t; }
bool operator!() const { return _t==0; }
};
использование:
class Derived : public Singleton<Derived>{
void foo();
...
};
void bar()
{
TSingeltonPtr<Derived> sp;
if ( !sp ) return;
sp->foo();
}
konst 11.12.2002 19:17
Маленькое замечание
Все таки непонятно, откуда пошла дурацкая мода в с++ коде давать данным-членам класса символ подчеркивания в качестве префикса? То есть, и так ясно откуда...Но ведь c++ не java... Например на MCVC++ код с такими префиксами не компилируется иногда. Ведь сказано же, зарезервировано под надобности компиляторов. Или это специально так отформатировано, чтобы читать было красивее? ;)
А статья действительно хорошая, удивило то что почти не пересекается с [3] ;)
Пересыпкин Михаил Алексеевич 3.12.2002 16:39
зачем возвращать указатель?
Еще хочу добавить: почему Instance() возвращает указатель а не ссылку? Тогда и путаницы с delete не будет!
Sergeem 19.11.2002 12:56
взаимодействие синглтонов
Интересно обсудить эту тему.Например у меня есть синглтон - менеджер памяти, синглтон - БД-клиент, и т.д.
Тогда менеджер памяти должен "уходить" последним, поскольку другие с-тоны могут освобождать память в своих деструкторах. Интересный вариант есть в loki. Я реалиовал свою модель. феслт кому интересно, могу поделиться или обсудить где-нить в С++ форуме.
Sergeem 19.11.2002 12:52
--">
Другие книги автора «Дмитрий Федоров»:
Дмитрий Федоров - Здравствуйте, «скорую» вызывали? Записки врача Жанр: Современная проза Год издания: 2020 Серия: Врачебные повести |
Варвара Андреевна Карбовская, Зиновий Юрьевич Юрьев, Виктор Юзефович Драгунский и др. - Золотой характер Жанр: Юмористическая проза Год издания: 1962 Серия: Антология современной прозы |