|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.11.2011, 00:52 | #1 |
Пользователь
Регистрация: 29.04.2009
Сообщений: 33
|
Реализация паттерна Singleton в случае наследование
Доброго времени суток.
Хотел узнать какой есть хороший способ реализовать паттерн Singleton но в случае когда у меня в иерархии классов наследование. Нашел один способ: http://sourcemaking.com/design_patterns/singleton/cpp/2 Но он требует изменять основной класс. Может у кого то есть какая нибудь другая идея? |
04.11.2011, 00:58 | #2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
По ссылке - какой-то гибрид одиночки и фабрики.
Просто одиночка наследуется, если хотя бы один конструктор protected. Какую логику Вы пытаетесь воплотить? |
04.11.2011, 05:03 | #3 |
Пользователь
Регистрация: 29.04.2009
Сообщений: 33
|
Примерно следующую:
Класс A - основной. B, C, D... дочерние. В системе только один из них может существовать(но один можна удалить и на его место поставить другой). Хотелось б чтоб B::getInstance(), C::getInstance(), D::getInstance() возвращали екземпляр своего класса(само собой если он подходящего типа), а A::getInstance() возвращал екземпляр класса A |
04.11.2011, 23:11 | #4 |
Пользователь
Регистрация: 29.04.2009
Сообщений: 33
|
Так что нет идей?
|
05.11.2011, 09:47 | #5 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Хотите на классы возложить лишнюю логику. Это неправильно. Я бы вообще не рассматривать синглтоны, а ввёл некий класс Manager для управления всем этим делом.
|
05.11.2011, 15:31 | #6 |
Пользователь
Регистрация: 29.04.2009
Сообщений: 33
|
Возможно б так и лучше, но проблема в том что уже большая часть приложения написана с использованием Singleton. Потом появилась необходимость ввести еще один подобний класс. Тепер уже третий, и всегда может существовать только один из них. Но иза похожей функциональности проходиться плодить много лишних класов, именно поетому решил ввести наследование.
Тепер о реализации. После долгих експериментов удалось добиться желаемого еффекта, хотя в одном месте все таки есть критический участок. Код:
Есть два минуса: 1. Можна сделать A::getInstance() когда не создан раньше екземпляр. 2. Если создан екземпляр класса B, то C::getInstance() тоже приведет к ошибке. |
05.11.2011, 22:30 | #7 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
В итоге получаем совсем и не синглтон из-за первого минуса. И кучу дублирования кода из-за реализации getInstance в наследниках.
По поводу второго минуса: Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как авторизоваться в таком случае? | grafgrial | Общие вопросы Delphi | 2 | 19.09.2011 21:38 |
Условное форматирование в случае #Н/Д и #ЗНАЧЕН | alexsampler | Microsoft Office Excel | 3 | 16.09.2011 16:27 |
Паттерн Singleton против функционального подхода | FiloXSee | Общие вопросы по программированию, компьютерный форум | 11 | 31.07.2011 18:13 |
Singleton | Selestis | Общие вопросы Delphi | 5 | 05.06.2011 13:38 |
паттерн singleton | zhenya.ya | Общие вопросы C/C++ | 1 | 26.11.2010 03:11 |