![]() |
|
Модераторы: Daevaorn Страницы: (9) Все « Первая ... 4 5 [6] 7 8 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
||
|
|
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Логично Ок, но зачем тебе два класса Keyboard, Display? --------------------
|
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
А мне они триста лет не надо Что ты хочешь сказать? -------------------- |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Я хочу сказать что одни разработчики вменяют в понятие синглетона одно, другие разработчики другое.. Твой синглетон совсем не соответствует Александреску, потом как он не глобален, зато он соответствует GoF. Покажи мне плз причину плохости Александресковской архитектуры. Это сообщение отредактировал(а) chipset - 3.4.2005, 05:48 --------------------
|
||||
|
|||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
-------------------- |
||||
|
|||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Я всё понимаю
Мне просто хочется узнать, почему ты делаешь именно так, и какие преимущества Гофовского синглетона. --------------------
|
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Ну вот например ты пишешь менеджер, управляющий очередью тредов, которым нужен доступ к неким ресурсам. При этом я знаю, что в своем коде я буду иобращаться к методу getInstance только один раз (до вызова dispose). Тогда возврат нула или выброс иксепшна, как в приведенном варианте, сразу жа будет сигнализировать об ошибке - кто-то попытался вызвать getInstance два раза до вызова dispose. Вот и все. Нужно это не во всех ситуациях, конечно.
-------------------- |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Обьясни чем смертельно что:
Гораздо безгемморойнее получать инстанс отовсюду чем переносить его как лишний параметр через функцию. --------------------
|
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Да я его никуда и передавать не буду. Я спроектирую код так, что этот синглтон будет нужен одному единственному классу, в котором сохраню ссылку как поле. -------------------- |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Итак, у нас есть два варианта:
1) Пусть синглетон кто хочет во всем приложении тот и получает. 2) Доступ к синглетону имеет только один(два, три, четыре, неважно) избранный класс который его и допрашивает. Вероятно, что в первом варианте имеют место быть полностью глобальные классы, такие как: Application, Keyboard, Game, при этом очень высока вероятность того что придет В. Пупкин и напишет ещё десяток классов которые будут заюзывать переменные и функции расположенные в этих классах. Во-втором варианте, вероятно что более подходят классы к которым обращаются только определенное (постоянное!) количество классов, такие как: Logger, чё там ещё? Опять-же, всё зависит полностью от архитектуры приложения. Насчёт архитектуры приложения у меня вопросов больше нету, всё говорит нелюбовь к глобальным переменным. Agreed? --------------------
|
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Я бы скорее сказал так.
Случай 1 (когда getInstance возвращает ссылку всегда) весьма напоминает (интерфейсом) другие паттерны, ту же фабрику, стейт или стратегию. В Java например, абстрактный класс NumberFormat имеет такие методы, которые тем не менее, возвращают ссылку не на синглтон, а ссылки на новые объекты класса DecimalFormat; и это далеко не единственный случай. Потому сам по себе интерфейс синглтона нисколько не говорит о том, что он синглтон. Программер Петя может, взглянув на паблик методы такого класса, пользоваться getInstance как обычным методом-фабрикой, считая, что он с каждым вызовом создает новый объект. Тогда в рантайме что будет проишодить, неясно - зависит от самого синглтона и от кода Пети. Возможно, тем самым он введет баг, который выловить будет очень сложно, так как ошибка логическая. Во втором варианте, возвращающем нул или бросающем иксепшн, такого не произойдет, ибо Петя сразу же получит скажем, иксепшн "Singleton method getInstance can be called only once". Поэтому, пользоваться первым вариантом можно, если то, что думает Петя о синглтоне (считает, что это обычный класс или нет), неважно. Тот же простой логгер, реализованный как синглтон, вполне сработает в обеих случаях. -------------------- |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Защищеный конструктор+метод instance применяется в других паттернах? --------------------
|
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
А если класс абстрактный ? ;) -------------------- |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Класс считается абстрактным если у него есть хоть одна виртуальная функция (в С++), поэтому причем тут защищеный конструктор я не догоню --------------------
|
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Дык я в курсе. Просто все равно ведь может быть конструктор, даже у абстрактного класса. Кстати, тогда его делают чаще всего протектед, чтобы сабклассы моглу к нему обратиться. Такшта похоже весьма. -------------------- |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
А зачем его вообще прятать? Класс то все равно не создастся.. --------------------
|
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |