Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно связать обьекты, как связать один обьект с другими 
:(
    Опции темы
asmdzen
Дата 11.12.2010, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



Есть обьект лог, который умеет записывать строки лога в файл, его используют еще несколько обьектов, будет ли правильным решение при создании других обьектов передавать указатель на лог или есть другие - более разумные решения? например если не только лог используется другими обьектами.
PM MAIL   Вверх
Cheloveck
Дата 11.12.2010, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



asmdzen, паттерн singleton


--------------------
user posted image
PM Jabber   Вверх
borisbn
Дата 11.12.2010, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Cheloveck @  11.12.2010,  14:04 Найти цитируемый пост)
asmdzen, паттерн singleton

не советую. наелся с ними выше крыши. по закону подлости ( действует вернее, чем закон притяжения ) завтра нужно будет в одном месте использовать этот класс с одними настройками, в другом - с другими.

Цитата(asmdzen @  11.12.2010,  13:20 Найти цитируемый пост)
будет ли правильным решение при создании других обьектов передавать указатель на лог

вполне нормальное решение, только лучше передавать либо shared_ptr либо ссылку. единственное ограничение ссылок: нельзя передать NULL (иногда это нужно. как в примере с твоим логом. например, в какой-то класс нужно передать NULL, чтобы он не логировал свои действия)

Есть ещё один метод. Мне лично он больше нравится: главная система наследуется от нескольких абстрактных интерфейсов ( лог, сеть, БД и т.п. ) и передаёт себя (this) в другие объекты, которые о системе ничего не знают, а знают только о конкретном интерфейсе). Типа такого

Код


class Logger {
  virtual void add( const char * str ) = 0;
};

class Network {
  virtual void send( const char * address, int port, void * data, unsigned int size ) = 0;
};

class MainSystem : public Logger, public Network
{
  virtual void add( const char * str );
  void send( const char * address, int port, void * data, unsigned int size );
  SomeClass1 * m_someClass1;
  SomeClass2 * m_someClass2;
};

class SomeClass1 {
  SomeClass1( Logger * logger ) m_logger( logger ) {}
  Logger * m_logger;
};

class SomeClass2 {
  SomeClass2( Network * network ) m_network( network ) {}
  Network * m_network;
};

MainSystem::MainSystem()
{
   m_someClass1 = new SomeClass1( this );
   m_someClass2 = new SomeClass2( this );
}


Это сообщение отредактировал(а) borisbn - 11.12.2010, 15:48


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.