|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
Масштабирование системы при использовании паттерна Singleton04.01.2017, 10:51. Показов 4913. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|