|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
Масштабирование системы при использовании паттерна Singleton04.01.2017, 10:51. Показов 4790. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|