|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
Масштабирование системы при использовании паттерна Singleton04.01.2017, 10:51. Показов 4768. Ответов 85
Метки нет (Все метки)
Добрый день, как доказать или опровергнуть, что архитектура теряет гибкость и расширяемость при активном использовании паттерна Singleton.
1
|
|
| 04.01.2017, 10:51 | |
|
Ответы с готовыми решениями:
85
Насчёт шаблонного паттерна SingleTon Необходима альтернатива при использовании Proxy паттерна
|
|
Комп_Оратор)
|
||||
| 08.01.2017, 12:26 | ||||
![]() Добавлено через 10 минут ![]() Там перегружены () и [] у базы хранящей указатели. Для каждого типа она одна. Нужно пересмотреть на предмет того, можно ли без них обойтись. Так что поторопился я может быть. Но всё равно интересно: Какие свойства присущие экземпляру класса, дают синглтону право на жизнь?
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 08.01.2017, 12:27 | |||
|
все классические модели сингелтонов спокойно деструктяццо) с контролем времени жизни у статического объекта? он живет до конца программы.
0
|
|||
|
Комп_Оратор)
|
||
| 08.01.2017, 12:31 | ||
![]() Не по теме: Впрочем, в предыдущем посте я написал, что по памяти вспомнил неверною Ну вот например: https://habrahabr.ru/post/118368/ тут речь не о собственно синглтоне, а о шаблоне синглтон.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 08.01.2017, 12:54 | ||||||||
автору нужно подучить с++, а не умничать на хабре.
2
|
||||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||
| 08.01.2017, 13:35 | ||||||
Синглтон нужен когда надо иметь в системе не более 1 объекта определенного типа. Такова его задумка ) В случае с объектом можно использовать несколько реализаций для одного и того же кода, который не заметит подмены. А с функциями так не делается... Я хотел сказать, что вызов статических методов подразумевает указание конкретного типа, что создает зависимости, а классический синглтон это глобальная переменная, только и всего ![]()
1
|
||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 08.01.2017, 13:42 | |||||||
0
|
|||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 08.01.2017, 13:59 | ||
|
hoggy,
Я плохо знаю С++, но насколько понимаю, функция void example(auto& obj); будет создана компилятором дважды, под каждый тип аргумента - отдельная(или я ошибаюсь?). Если прав, то уже не эффективно. В таком случае лучше передать указатель на базовый тип(например, интерфейс) и не заставлять компилятор генерировать две функции. Ещё хочу отметить, что в таком примере отсутствует базовый тип(а он напрашивается), особенно если мы пишем библиотеку для сторонних пользователей. А когда он есть, достаточно обойтись указателем на него ![]() Если продумывать более детально, может ещё можно выявить проблемы Добавлено через 3 минуты Представим что есть два объекта car и rocket. у обоих есть метод run(), а некий метод вроде example принимает auto параметр, а в теле вызывается run. Если вместо машины передать ракету случайно, то начнется ядерная война, а мы всего то хотели включить машину... И компилятор об этом не сообщит, с его точки зрения все в порядке
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||
| 08.01.2017, 14:06 | ||||||||||
|
и в итоговом бинаре вообще не будет никакой функции example нежели динамический. и ни разу не понадобилось передавать сингелтоновый объект через аргументы функций. Добавлено через 5 минут
0
|
||||||||||
|
Комп_Оратор)
|
|||||||
| 08.01.2017, 14:15 | |||||||
0
|
|||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||||
| 08.01.2017, 14:24 | ||||||
![]() А это всем известная проблема
0
|
||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 08.01.2017, 14:49 | ||||||||
|
вы вообще о чем? и что такое "программирование в терминах интерфейсов" вот нафига это нужно сингелтонам - вот это уже не очевидно. на практике ни разу не сталкивался с такой потребностью. я вам, кстати, код привёл, который прекрасно эту ситуацию разруливает в статике. динамика нафиг не нужна там, где прекрасно можно обойтись статикой. с которой не приходится сталкиваться на практике. ![]() ![]() вообще то это - классика жанра. типично с++ паттерн. называется "контракт времени компиляции". например, можно зафрендить любые типы классов, которые поддерживают тот или иной контракт. и при этом ключевое слово friend уже использовать не понадобится.
2
|
||||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||||
| 08.01.2017, 15:19 | |||||
Лучше dependency injection, и передавать куда что нужно, а если требуется один экземпляр тогда обертки вроде service locator очень даже спасают. В итоге получаем гибкость и один объект если это требуется Но мне лично проще поставить указатель на базовый тип, это выглядит более общепринято и без использования языкозависимых фич(раз уж мы говорим об ООП).
0
|
|||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||
| 08.01.2017, 15:39 | |||||
|
и тогда просто нет выбора. но во всех остальных случаях его использование смахивает на ооп-головного мозга. что вы не используете всю мощь, и выразительность своего языка программирования.
0
|
|||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 08.01.2017, 17:30 | ||
|
Предположим что разработчик придерживается стандартного SQL и база у нас MySQL. Спустя некоторое время выясняется, что нужно обеспечить поддержку иной SQL базы, взаимодействовать с уже готовой базой по тем же правилам что и в случае MySQL(допустим, в зависимости от выбора пользователя нужно залезть в определенную базу). В случае DI, можно будет просто передать адаптер который больше подходит для запроса пользователя. А в случае синглтона придется серьезно рефакторить код
1
|
||
| 08.01.2017, 19:12 | |
|
Я что-то краем уха помню, как некто говорил, что синглетон отличается от статических методов/модулей тем, что его (как объект) можно во-первых, инициализировать лениво - то есть, если он не потребовался в данном сеансе работы, то и не будет создаваться объект с выделением памяти, а еще его как объект можно сериализовать и передать куда-нибудь вдаль... Но в моих наколенных поделках эти преимущества оказались недостаточными, поэтому я костылил все еще хуже - на статических полях/методах.
0
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||
| 08.01.2017, 19:15 [ТС] | ||
|
0
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 08.01.2017, 19:16 | |
|
Написать верхушку, которую сделать синглтоном, от неё унаследовать первоначальную SQL и новую требуемую.
Это несерьёзно. Товарищи, скажите мне вот что, есть ли в контексте паттернов термин масштабируемости? В контексте параллельного программирования есть. В контексте паттернов такой термин есть или нет? Если в контексте паттернов такого термина нет, то любой здешний сыр-бор выглядит и будет выглядеть, как кашу готовить открытием форточки на потолке козы.
0
|
|
| 08.01.2017, 19:23 | |
|
rikimaru2013, возможно ошибаюсь, я не знаток синглетонов, паттернов и вообще ООП. Но я веду речь о том, что если синглетон рассматривать как объект (ака экземпляр класса) - то какие преимущества он может иметь как объект перед другими способами добиться той же абстракции и функциональности.
0
|
|
|
Модератор
|
|
| 08.01.2017, 19:24 | |
|
0
|
|
| 08.01.2017, 19:24 | |
|
Может ли потребоваться применение механизма событий при использовании паттерна MVVM?
Постоянно прохожу проверку CAPTCHA при использовании поисковой системы Collections: singleton/singletonList/singletonMap. Что значит слово singleton? Установка "лимита" на значение решения системы ОДУ при использовании решателя ode45 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|
|
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса
Калибровка параметров симбиотической модели: технический обзор
Содержание:
Введение
Постановка проблемы
Технические аспекты реализации
Процесс внедрения изменений
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы
### Аннотация
Представлено исследование по разработке агентной модели микоризной. . .
|
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики
Контекст
Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
|