1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
1

Паттерны. Нужны небольшие пояснения

15.05.2016, 01:02. Показов 1674. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Паттерн "Абстрактная фабрика" предоставляет для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.

1. Что понимается под взаимосвязанными объектами?
2. Что понимается под взаимозависимыми объектами?

Я так понимаю, что это два различных случая? Если да, то нужно два примера на пальцах.

Применимость:
- Входящие в семейство взаимосвязанные объекты должны использоваться вместе и вам необходимо обеспечить выполнение этого ограничения.

3. Я догадываюсь, о чём тут имеется в виду, но боюсь, что заблуждаюсь, а тыкать в небо пальцем неохота. Хотелось бы конкретики.

Можете немного разъяснить эти моменты?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2016, 01:02
Ответы с готовыми решениями:

Нужны небольшие пояснения по маленькому фрагменту кода, реализующего рекурсивный поиск в глубину по графу
Здравствуйте, не могу разобраться в этой функции. Ниже есть ссылка на сам алгоритм. Заранее...

Нужны пояснения
Читаю "С++ руководство для начинающих" Герберта Шилдта. Дочитал до "передача аргументов командной...

Нужны некоторые пояснения
При выполнении программы есть область 20 на 20. 1) Почему при движении вправо или влево, после...

Нужны пояснения по стеками
Вот как звучит условие: Создать два стека для символов. Максимальный размер стеков вводится с...

20
Модератор
Эксперт функциональных языков программирования
3063 / 2209 / 459
Регистрация: 26.03.2015
Сообщений: 8,514
15.05.2016, 08:26 2
Цитата Сообщение от daslex Посмотреть сообщение
2. Что понимается под взаимозависимыми объектами?
В одном классе есть какое-либо упоминание другого класса - зависимость. Хотя бы один из классов знает о существовании другого.

Цитата Сообщение от daslex Посмотреть сообщение
1. Что понимается под взаимосвязанными объектами?
Связанные по смыслу. Например, стиль-отображения-кнопок и стиль-отображения-списков. Формально зависимости нет (каждый из классов ничего не знает о существовании другого). Но на практике, если мы стили отображения различных элементов должны сочетаться, иначе будет некрасиво.
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
15.05.2016, 09:23  [ТС] 3
Цитата Сообщение от Shamil1 Посмотреть сообщение
В одном классе есть какое-либо упоминание другого класса - зависимость. Хотя бы один из классов знает о существовании другого.
Хотя бы один пример случая, где может возникнуть такая необходимость, нужен. (относительно абстрактной фабрики желательно)
0
Модератор
Эксперт функциональных языков программирования
3063 / 2209 / 459
Регистрация: 26.03.2015
Сообщений: 8,514
15.05.2016, 09:50 4
Цитата Сообщение от daslex Посмотреть сообщение
Хотя бы один пример случая, где может возникнуть такая необходимость, нужен.
Например, стиль-отображения-кнопок и стиль-отображения-текста. Причём, в классе стиль-отображения-кнопок (при отображении текста кнопки) используется экземпляр класса стиль-отображения-текста.
1
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 190
18.05.2016, 10:43 5
Обычно абстрактная фабрика предназначена для создания полуфабрикатов. От абстрактной фабрики наследуются конкретные фабрики, производящие конечные продукты. Пример, когда такое необходимо - у каждого продукта должен быть уникальный последовательный числовой идентификатор. В этом случае выгодно, когда абстрактная фабрика считает выпускаемые объекты и назначает очередному объекту номер, передавая его в дальнейшем конкретной фабрике.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
03.01.2017, 13:52  [ТС] 6
Вопрос о паттерне "Одиночка".
Спрошу настолько, насколько могу спросить. Надеюсь, что что вопрос получится понятным.

У меня сейчас вопрос обратный использованию синглтона: когда существует видимость, что синглтон подходит, руки могут чесаться его применить, но применение его получится ошибкой?
0
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 190
05.01.2017, 21:36 7
daslex, иногда (но не всегда) синглтоны плохо взаимодействуют с многопоточностью. Когда один и тот же объект нужен всем и приходится синхронизировать доступ к нему, производительность падает.
Также плохо, если синглтон большой и выполняет сразу много функций. Тогда его лучше разбить на несколько классов поменьше, и возможно, не все из них будут синглтонами.
Ещё проблемы могут появиться, когда надо контролировать время жизни синглтона: создавать/уничтожать его в каком-то порядке относительно создания/уничтожения других объектов.
Наконец, в целом синглтон может создать зависимость всего программного кода от наличия себя, которую потом не распутать простым образом. Надо стремиться к модульности, независимости работы одних классов от других.
0
Эксперт функциональных языков программированияЭксперт Java
4487 / 2722 / 485
Регистрация: 28.04.2012
Сообщений: 8,592
05.01.2017, 22:21 8
Цитата Сообщение от cordfield Посмотреть сообщение
иногда (но не всегда) синглтоны плохо взаимодействуют с многопоточностью. Когда один и тот же объект нужен всем и приходится синхронизировать доступ к нему, производительность падает.
Да хрен с ней, с производительностью, синглтон в принципе не способен реализвать, например, TreadLocal, когда у каждого потока гарантированно свой инстанс. Точнее, исхитриться-то можно, типа хранить в объекте-синглтоне мапу поток-окружение, но это жуткое извращение.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
05.01.2017, 23:01  [ТС] 9
Что-то мне подсказывает, что, когда у каждого потока гарантировано свой инстанс, это совсем не синглтон. Это может быть синглтоном только и только в контексте своего потока. Выходя за границы своего потока, такого рода синглтон перестаёт быть синглтоном.
Так же мне представляется, что какой-нибудь TreadLocal-Singletons (простите, я не понимаю о чём здесь имеется в виду, могу не попасть), где будет происходит распределение исключительно синглтонов (какой-нибудь рэндомизатор задач какого-нибудь соревновательного комплекса) - вполне обыденная повседневность.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.01.2017, 17:03 10
Цитата Сообщение от daslex Посмотреть сообщение
когда существует видимость, что синглтон подходит, руки могут чесаться его применить, но применение его получится ошибкой?
одиночка - паттерн, который гарантирует единственность экземпляра класса.
вопрос в том, зачем это нужно. если существует необходимость
(например, два экземпляра потенциально могут разрушить работу бизнес логики)
нужно обеспечить гарантию. если необходимости в сингелтоне нет - он не нужен.

пример:
в рамках одного приложения не может существовать более одной подсистемы GUI.
попытка создать две такие системы приведут их в состояние нестабильности.
решение: сделать подсистему сингелтоном.

другой пример:
std::cout - глобальный объект.
но он не является сингелтоном.
нет необходимости делать его класс одиночкой.

Добавлено через 2 минуты
Цитата Сообщение от cordfield Посмотреть сообщение
иногда (но не всегда) синглтоны плохо взаимодействуют с многопоточностью.
ключевое слово - "иногда".
ещё одно волшебное слово "thread_local"
1
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
06.01.2017, 23:46 11
Цитата Сообщение от hoggy Посмотреть сообщение
одиночка - паттерн, который гарантирует единственность экземпляра класса.
В GoF одиночка предназначен для создания одного или фиксированного числа экземпляра класса.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.01.2017, 09:46 12
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
В GoF одиночка предназначен для создания одного или фиксированного числа экземпляра класса.
что то не припоминаю насчет "фиксированного числа экземпляров".
и вообще звучит, как какой то бред.
специально открыл книжку.
ничего про фиксированное число там нет.

ПаттернSingleton
Назначение
Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
Мотивация
Для некоторых классов важно, чтобы существовал только один экземпляр. Хотя в системе может быть много принтеров, но возможен лишь один спулер. Должны быть только одна файловая система и единственный оконный менеджер. В цифровом фильтре может находиться только один аналого-цифровойпреобразователь (АЦП). Бухгалтерская система обслуживает только одну компанию.
Как гарантировать, что у класса есть единственный экземпляр и что этот экземпляр легко доступен? Глобальная переменная дает доступ к объекту, но не запрещает инстанцировать класс в нескольких экземплярах.
Более удачное решение - сам класс контролирует то, что у него есть только один экземпляр, может запретить создание дополнительных экземпляров, перехватывая запросы на создание новых объектов, и он же способен предоставить доступ к своему экземпляру. Это и есть назначение паттерна одиночка.
Применимость
Используйте паттерн одиночка, когда:
должен быть ровно один экземпляр некоторого класса, легко доступный всем клиентам;
единственный экземпляр должен расширяться путем порождения подклассов, и клиентам нужно иметь возможность работать с расширенным экземпляром без модификации своего кода.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
08.01.2017, 13:00 13
hoggy, читай раздел Результаты. Допускается и наследование и переменное число экземпляров.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.01.2017, 13:08 14
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
переменное число экземпляров.
один только вопрос: нафига?
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
08.01.2017, 13:25 15
К примеру если нужно работать с несколькими мониторами. Логично предположить, что 100500 подключить невозможно.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.01.2017, 13:30 16
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
К примеру если нужно работать с несколькими мониторами.
в этой ситуации сингелтон не нужен.

Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Логично предположить, что 100500 подключить невозможно.
нет причин для искусственных ограничений.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
08.01.2017, 13:42 17
Цитата Сообщение от hoggy Посмотреть сообщение
нет причин для искусственных ограничений.
Если программа пишется и сопровождается одним и тем же человеком, то нет.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.01.2017, 14:34 18
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Если программа пишется и сопровождается одним и тем же человеком, то нет.
да без разницы сколько народу пилит проект.
ограничение по количеству экземпляров - это какой то бред.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
08.01.2017, 16:45 19
Цитата Сообщение от hoggy Посмотреть сообщение
да без разницы сколько народу пилит проект.
Когда проект на C++ пилят жуниоры, то разницы действительно нет

Цитата Сообщение от hoggy Посмотреть сообщение
ограничение по количеству экземпляров - это какой то бред.
Вы же ограничиваете пул потоков разумным числом, которое обычно зависит от количества доступных ядер
0
Эксперт функциональных языков программированияЭксперт Java
4487 / 2722 / 485
Регистрация: 28.04.2012
Сообщений: 8,592
09.01.2017, 21:37 20
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Вы же ограничиваете пул потоков разумным числом, которое обычно зависит от количества доступных ядер
Single = один. Либо переименовывайте паттерн, либо не обманывайте людей. =)
0
09.01.2017, 21:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2017, 21:37
Помогаю со студенческими работами здесь

Нужны пояснения к программе
Добрый вечер форумчане, подскажите в пояснении этого кода. а именно вот этой строки * arr =...

Нужны пояснения к программе
Добрый вечер форумчане, подскажите в пояснении этого кода, запутался что-то, оставил коментарии,...

Нужны пояснения по вложенным классам
задался вот таким вопросом, почему не получается объявить вложенный класс следующим образом?...

Нужны пояснения по Русской кодировке
В общем вывожу из xml строки в Memo и у друга на машине русские символы в виде "?????????" как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru