crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Шаблон проектирования Singleton (одиночка), подбираю подходящий для моей задачи
Litkevich Yuriy
  опции профиля:
сообщение 4.5.2008, 20:04
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Подбираю шаблон проектирования для моей задачи.
Задача такая:
Есть программа типа MDI, хочу сделать в ней многопользовательскую работу, в одно время работает только один пользователь.
В зависимости от группы пользователя ему становится доступным определенный, для данной группы, набор пунктов меню.

Я это так прикинул:
1-Нужно хранить переменную, например, uid, в которой указан код текущего пользователя/группы.
2-Нужен диалог ввода имени и пароля, который будет где-нибудь искать есть ли такая пара логин/пароль. Если есть, то устанавливать найденное значение в переменной uid. Если нет - ругнутся на пользователя.
3-Основное окно программы получает от диалога результат: ОК-пользователь найден, надо обновить меню, НЕ ОК - пользователь не найден, ничего не делать.

Но я подумал, что какому нибудь еще окну может понадобится знать uid, и поэтому я думаю, что простая глобальная переменная будет неудобна, и хочу сделать класс, в котором будет реализовандиалог авторизации и прочие штуки в том числе статическая переменная uid, а в других классах динамически создавать экземпляры, если сделать этот класс как "одиночку", то uid должен быть общим для всех экземпляров.
----
Вот такие мысли в моей голове, может уже есть для подобной задачи отработаный подход, и моя мысль слишком замудренная?
Просвятите пожалуйста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Влад
  опции профиля:
сообщение 28.9.2009, 20:46
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

Спасибо сказали: 46 раз(а)




Репутация:   8  


Ага, этот пример кода выдран с корнем из реально работающего (уж года два как... в режиме 24x7) проекта. m_me - это как раз и есть объект-одиночка, а m_cs - это объект блокировки (под MFC это критическая секция, но, в принципе, с таким же точно успехом при минимальной модификации кода может быть и posix-ный mutex). В коде принципиально, что m_me должен быть именно volatile.

Это - просто пример реализации идиомы Double-Checked Locking, а более подробно о ней может рассказать и гугл; по-моему, тема подробно освещена у классиков типа Мейерса, Саттера.... вот только не помню, у кого точно.

Сообщение отредактировал Влад - 28.9.2009, 20:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Litkevich Yuriy   Шаблон проектирования Singleton (одиночка)   4.5.2008, 20:04
- - ViGOur   Для твоей задачи можно использовать как глобальную...   4.5.2008, 21:12
- - Litkevich Yuriy   Цитата(ViGOur @ 5.5.2008, 1:12) Singleton...   4.5.2008, 21:19
- - Litkevich Yuriy   слушай а функции InitInstance() и FreeInstance(); ...   5.5.2008, 8:54
- - ViGOur   Угу, именно так, только не потому, что статические...   5.5.2008, 9:11
- - Litkevich Yuriy   еще вопрос по теме задачи: В голове крутится вариа...   5.5.2008, 9:16
- - ViGOur   Да никаких последствий вроде не должно быть.   5.5.2008, 9:27
- - Litkevich Yuriy   положим "одиночку" я кладу в два файла s...   5.5.2008, 10:08
- - ViGOur   Принципиальной разницы не вижу, я обычно это делаю...   5.5.2008, 10:20
- - Litkevich Yuriy   просто я подумал, что если в хидере будет, то он н...   5.5.2008, 10:27
- - ViGOur   Для этого и существуют такие директивы препороцесс...   5.5.2008, 10:39
- - Litkevich Yuriy   хе, правильно хидер то один и тот же, туплю   5.5.2008, 10:42
- - Tonal   Обычно синглетон (одиночка) без FreeInstance и без...   5.5.2008, 11:02
- - Litkevich Yuriy   а зачем вот эта строка: Цитата(ViGOur @ 5.5.2...   5.5.2008, 11:12
- - Andrew Selivanov   Цитата(Litkevich Yuriy @ 5.5.2008, 11:42)...   5.5.2008, 11:19
- - Litkevich Yuriy   у меня есть Эрих Гамма, там тоже есть примеры, но ...   5.5.2008, 11:25
- - ViGOur   Цитата(Litkevich Yuriy @ 5.5.2008, 12:12)...   5.5.2008, 11:44
- - Litkevich Yuriy   да, про конструктор/деструктор я понял, это чтоб н...   5.5.2008, 11:45
- - Litkevich Yuriy   Например, в Qt'ях я применяю такую строку: QTe...   5.5.2008, 12:29
- - ViGOur   Тот пример, что ты привел, обычная статическая фун...   5.5.2008, 12:42
- - Litkevich Yuriy   =1= ViGOur, у меня компилер ругается на такую стро...   14.5.2008, 10:29
- - Andrew Selivanov   Цитата(Litkevich Yuriy @ 14.5.2008, 11:29...   14.5.2008, 11:11
- - ViGOur   Цитата(Andrew Selivanov @ 14.5.2008, 12:1...   14.5.2008, 11:36
- - Litkevich Yuriy   тогда вот так ругается : Цитатаsingleton.h:26: war...   14.5.2008, 11:43
- - LuckLess   return *this;   14.5.2008, 11:44
- - Litkevich Yuriy   LuckLess, да вот так: Session& operator=(c...   14.5.2008, 11:46
- - LuckLess   еще такой вариант синглтона.. template <class ...   14.5.2008, 11:56
- - Litkevich Yuriy   а для чего int I, она ведь неиспользуется, в шабло...   14.5.2008, 12:08
- - LuckLess   для того чтобы ты мог создать два разных синглтона...   14.5.2008, 14:13
- - Litkevich Yuriy   с каждым днем начинаю понимать пользу от единствен...   16.5.2008, 12:50
- - Litkevich Yuriy   В итоге получилось так: singleton.h#ifndef SINGLET...   27.9.2009, 21:16
- - Влад   Юрий, по твоей реализации (кстати, практически кла...   27.9.2009, 21:47
- - Litkevich Yuriy   Цитата(Влад @ 28.9.2009, 1:47) 1. констру...   27.9.2009, 23:17
|- - AD   Цитата(Litkevich Yuriy @ 28.9.2009, 0:17)...   27.9.2009, 23:56
- - Влад   Не совсем так. Правильный (имхо) пример кода приве...   28.9.2009, 11:23
- - Litkevich Yuriy   Влад, поясни пожалуйста свой код. И m_cs что тако...   28.9.2009, 18:45
|- - AD   Цитата(Litkevich Yuriy @ 28.9.2009, 19:45...   28.9.2009, 20:25
- - Litkevich Yuriy   AD, указатель в его примере - m_me   28.9.2009, 20:29
- - Влад   Ага, этот пример кода выдран с корнем из реально р...   28.9.2009, 20:46
- - Litkevich Yuriy   Цитата(Влад @ 29.9.2009, 0:46) Double-Che...   28.9.2009, 21:13
|- - AD   Цитата(Litkevich Yuriy @ 28.9.2009, 22:13...   28.9.2009, 21:16
- - Litkevich Yuriy   ага, уже разобрался, в Вкикпедии прочитал   28.9.2009, 21:59
- - Влад   Гм, ну если уж говорить о кроссплатформе, то наибо...   29.9.2009, 16:23


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 0:03