Доступ к методам Singleton-а
От: artemox Казахстан  
Дата: 09.11.04 12:30
Оценка:
Имеется Singleton — например CLogger.Методы его вызываются достаточно часто во всех класах.
Каждый раз получать ссылку на экземпляр вызывая CLogger::Instance() не удобно.
Как поступить в этой ситуации?
Пока на ум пришло 2 решения
— глобальные макросы или процедуры, для основных методов CLogger (типа DEBUG, INFO, ERROR ... )
— в каждом классе хранить ссылку на CLogger (инициализируюмую в конструкторе)
Re: Доступ к методам Singleton-а
От: Зверёк Харьковский  
Дата: 09.11.04 12:53
Оценка: 2 (1)
Здравствуйте, artemox, Вы писали:

A>Имеется Singleton — например CLogger.Методы его вызываются достаточно часто во всех класах.

A>Каждый раз получать ссылку на экземпляр вызывая CLogger::Instance() не удобно.
A>Как поступить в этой ситуации?
A>Пока на ум пришло 2 решения
A> — глобальные макросы или процедуры, для основных методов CLogger (типа DEBUG, INFO, ERROR ... )
A> — в каждом классе хранить ссылку на CLogger (инициализируюмую в конструкторе)

простой метод:
CLogger::me() - меньше набирать

метод с макросом:
#define LOG CLogger::me()

LOG.metod1();
LOG.metod2()
сам слушаю и вам рекомендую: в тишине сижу
FAQ — це мiй ай-кью!
Re: Доступ к методам Singleton-а
От: Ведмедь Россия  
Дата: 09.11.04 13:40
Оценка: 2 (1)
Здравствуйте, artemox, Вы писали:

A>Имеется Singleton — например CLogger.Методы его вызываются достаточно часто во всех класах.

A>Каждый раз получать ссылку на экземпляр вызывая CLogger::Instance() не удобно.
A>Как поступить в этой ситуации?
A>Пока на ум пришло 2 решения
A> — глобальные макросы или процедуры, для основных методов CLogger (типа DEBUG, INFO, ERROR ... )
A> — в каждом классе хранить ссылку на CLogger (инициализируюмую в конструкторе)

А чем не нравятся статические методы?

CLogger::Write()
Да пребудет с тобой Великий Джа
Re[2]: Singleton с параметрами
От: artemox Казахстан  
Дата: 09.11.04 13:58
Оценка:
Спасибо. Твой второй вариант пока самое короткое и неприхотливое решение.
По ходу еще один вопрос возник — так может когда нибудь пригодится
Как быть если синглетон должени принимать параметр в конструкторе?
Re[3]: Singleton с параметрами
От: hrg Россия  
Дата: 09.11.04 14:47
Оценка:
artemox -> "Re[2]: Singleton с параметрами"

a> Спасибо. Твой второй вариант пока самое короткое и неприхотливое

a> решение.
a> По ходу еще один вопрос возник — так может когда нибудь пригодится
a> Как быть если синглетон должени принимать параметр в конструкторе?

главное чтобы инстанс один и тот же возвращал, а уж сколько и какие
параметры — пофиг

Yury Kopyl aka hrg | Гордость мешает доходам!
Posted via RSDN NNTP Server 1.9 gamma
Re[4]: Singleton с параметрами
От: artemox Казахстан  
Дата: 10.11.04 04:28
Оценка:
Здравствуйте, hrg, Вы писали:

hrg>главное чтобы инстанс один и тот же возвращал, а уж сколько и какие

hrg>параметры — пофиг

Это ясно Но как быть если сначала был вызван S::Instance(1) а позже S::Instance(2).
По идее надо генерить exception. Да и вобще, имхо лучше избегать таких синглетонов.
Re[2]: Доступ к методам Singleton-а
От: artemox Казахстан  
Дата: 10.11.04 04:39
Оценка:
Здравствуйте, Ведмедь, Вы писали:

В>А чем не нравятся статические методы?


В>CLogger::Write()


В принципе если в статический класс "встроить" синглетон, или для синглетона сделать оббертку из статического класса , то вполне приемлимо. Честно говоря несмотря на то что кода писать больше, склонюсь видимо именно к этому решению. Если можно обойтись без макросов, то стараюсь сделать именно так. Что за нелюбовь к #define
Re[3]: Доступ к методам Singleton-а
От: Ведмедь Россия  
Дата: 10.11.04 08:32
Оценка:
Здравствуйте, artemox, Вы писали:

A>Здравствуйте, Ведмедь, Вы писали:


В>>А чем не нравятся статические методы?


В>>CLogger::Write()


A>В принципе если в статический класс "встроить" синглетон, или для синглетона сделать оббертку из статического класса , то вполне приемлимо. Честно говоря несмотря на то что кода писать больше, склонюсь видимо именно к этому решению. Если можно обойтись без макросов, то стараюсь сделать именно так. Что за нелюбовь к #define


Кроме того универсальней, если это будет MC++, то результаты можно будет применять в проектах на C#, к примеру.
Да пребудет с тобой Великий Джа
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.