Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
Комбинатор
 Аватар для DenQ
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556

Как называется паттерн?

29.09.2014, 11:37. Показов 3138. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

По работе, пришлось реализовать некую структуру, где за основу был взять паттерн Одиночка.
Принцип работы заключается вот в таком вызове
ChatView::getInstance(chatId, type)

т.е., при вызове метода getInstance с определенными параметрами, в списке экземпляров ищется экземпляр, удовлетворяющий условиям(параметром) и если он найден, то он и возвращается, иначе создается новый элемент в списке, и он же и возвращается

Этот список содержит экземпляры своего класса.

Как может называется подобная реализация паттерна Одиночка?

ЗЫ. На ум приходят хеши, или уникальный индекс, по 2 параметрам в данном случае.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2014, 11:37
Ответы с готовыми решениями:

Как называется паттерн?
здравствуйте, в общем начитался тут всякого: http://mariusbancila.ro/blog/2014/10/15/extension-methods-in-cpp/ сам раньше кодил...

Почему паттерн абстрактная фабрика - паттерн уровня объектов, если в нём могут быть статические отношения?
Взято из Шевчук А., Охрименко Д., Касьянов А. Design Patterns via C#. Приемы объектно-ориентированного проектирования (2015): Почему...

Как реализовать паттерн
Как реализовать паттерн с помощью интерфейсов C++

26
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
29.09.2014, 18:35
Цитата Сообщение от DenQ Посмотреть сообщение
Как может называется подобная реализация паттерна Одиночка?
Это не Одиночка. Лично я не вижу причин делать из любого кода какой-то "паттерн", это просто отображение типа (chatId_Type x type_Type) -> ChatView, с поправкой на идентичность.
0
Комбинатор
 Аватар для DenQ
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556
30.09.2014, 11:11  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
Лично я не вижу причин делать из любого кода какой-то "паттерн"
Ну так я тоже не вижу. Вопрос то в том, существует ли уже подобный паттерн. Нужно мне это для того что б в документации к коду дать описание.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
01.10.2014, 10:43
Справочник «Паттерны проектирования»
Шаблон проектирования
Если твоего паттерна нет, то классифицируй его самостоятельно, как это делать есть в Приёмы объектно-ориентированного проектирования. Паттерны проектирования
0
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 17
09.10.2014, 21:59
Нужно мне это для того что б в документации к коду дать описание.
Если только для этого, то пиши в документации Singletone
0
Кандёхаем веселее!
 Аватар для MLPMan
296 / 330 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
11.10.2014, 10:23
scp173, почему, у него жи существуют одновременно пару экземпляров. Это типа ассоциативный массив с составным ключом.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.10.2014, 10:43
Это не одиночка, а уникум. Вопрос в том, придуман ли данный паттерн DenQ, или же только угадан. Если придумал, то ссылаться, как на паттерн пока рано.
0
Комбинатор
 Аватар для DenQ
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556
15.10.2014, 14:03  [ТС]
Вчера наткнулся на видео
Кликните здесь для просмотра всего текста

Там как раз говорится(ближе к концу), о том, что к подобной реализации, приходят независимо множество программистов, и даже предложил названия:
* идентификатор
* облако
Последнее название как мне кажется, очень хорошо характеризует данный паттерн - облако.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.10.2014, 15:54
Тип класса S.
Нужны комментарии? К тому же типом с какого перепугу зовётся переменная.
Ресурсы объекто-ориентированного программирования
Ещё смешней. Потом почему то функции нет возможности получить доступ к обычной глобальной переменной. Потом почему то функции нет возможности получить доступ к обычной глобальной переменной. Ни когда не смотрите таких "уроков", их авторы сами то что ещё хоть что то знают, но чтоб продраться через все их глюки надо уже знать, что они пытаются сказать, причём, как минимум не хуже, а новичка такой "учитель" только испортит. И чем хорошо облако? Уникум лучше. Класс, о котором толкует ТС, гарантирует, что ни какие два объекта не будут идентичны. То есть объектов может быть много, но каждый гарантированно уникален. Слово "облако" нифига об этом не говорит.
0
Комбинатор
 Аватар для DenQ
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556
15.10.2014, 23:11  [ТС]
taras atavin, я привел это видео не для того, что б его тут критиковать, и не для того что б восхвалить автора канала... Я оставил комментарий к видео, который повествует мое мнение о видео.

Цитата Сообщение от taras atavin Посмотреть сообщение
чем хорошо облако?
Дело в том, что в данной структуре, имеется свойство, которое содержит коллекцию себе подобных экземпляров. Уникальность кроется в осадках - не существует двух одинаковых снежинок. А облако, потому что у нас не все небо в облаках, затянуть, словно одно большое облако - т.е. имеются целые семейства облаков...
0
21 / 21 / 6
Регистрация: 07.01.2010
Сообщений: 376
18.10.2014, 14:10
DenQ, это, наверное, мультитон.
0
18.10.2014, 18:58

Не по теме:

Serg046, :rofl:

0
21 / 21 / 6
Регистрация: 07.01.2010
Сообщений: 376
18.10.2014, 19:15
MLPMan, что смешного?
http://en.wikipedia.org/wiki/Multiton_pattern
2
Комбинатор
 Аватар для DenQ
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556
18.10.2014, 22:56  [ТС]
Serg046, невероятно, вот слово которое витает у меня в голове сейчас. Спасибо большое, это именно то, что я искал!
ЗЫ. Полное совпадение.
0
157 / 2 / 0
Регистрация: 27.06.2013
Сообщений: 21
07.02.2015, 23:44
В книге PHP. Объекты, шаблоны и методики программирования, кажется, такой шаблон называется Identity Map. Описан в главе 13:
Компонент Identity Map создаёт и инициализирует новый объект только в том случае, если объект с аналогичными отличительными особенностями ещё не создан. Если таковой существует, то возвращается просто ссылка на него.
0
21 / 21 / 6
Регистрация: 07.01.2010
Сообщений: 376
09.02.2015, 13:00
tolik89u, а это "по-русски" пул объектов.

Не по теме:

P.S. не стоит привязываться к какому-то языку или автору.

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.02.2015, 12:45
Цитата Сообщение от Serg046 Посмотреть сообщение
tolik89u, а это "по-русски" пул объектов.
Объектный пул создает столько экземпляров, сколько было запрошено.
Его задача - контролировать аллокацию объектов, и не более того.

А вот Мультитон решает совсем другую задачу:
позволяет биндить тип-ключа на тип-объекта,
гарантируя что объект будет создан в единственном экземпляре.

Оба подхода хорошо сочетаются в разного рода фабриках объектов.

Например, на статическом с++ это позволяет создавать объекты,
имена классов которых известны только в рантайме:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// указываем какое символьное имя соответствует классу
factory::reg<Worker1>("Worker1");
factory::reg<Worker2>("Worker2");
 
// функционал объектного пула
 
// на входе: символьное имя класса, на выходе - экземпляр класса
// при этом объект будет аллоцирован в пуле.
// когда время жизни выданного интерфейса завершится, 
// пул автоматически получит об этом уведомление
// и будет считать слот, который занимал объект "освободившимся"
// в дальнейшем он может занять его под вновь запрошенный объект
auto obj = factory::create("Worker1");
 
// функционал мультитона
 
// на входе: символьное имя класса, на выходе - одиночка.
// первый вызов приводит к созданию одиночки, 
// последующие - лишь возвращают ссылки
// при этом, если забиндить несколько символьных имен на один и тот же тип,
// и хотя бы один из вызовов уже привел к созданию одиночки, 
// то последующие вызовы лишь возвращают ссылки
auto obj = factory::get("Worker1");
 
// время жизни одиночки - вся программа, либо пока он не был разрушен явным образом
factory::kill("Worker1");
0
21 / 21 / 6
Регистрация: 07.01.2010
Сообщений: 376
10.02.2015, 12:51
hoggy, похоже вы не обращали внимание на то, кому я и на что отвечал = )

Цитата Сообщение от hoggy Посмотреть сообщение
Объектный пул создает столько экземпляров, сколько было запрошено.
xD
Ну, тут также дам ссылку на внешний источник, а не буду выдумывать свое определение...
https://ru.wikipedia.org/wiki/... _%EF%F3%EB
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.02.2015, 13:21
Цитата Сообщение от Serg046 Посмотреть сообщение
hoggy, похоже вы не обращали внимание на то, кому я и на что отвечал = )
Цитата Сообщение от tolik89u Посмотреть сообщение
Identity Map
Цитата Сообщение от hoggy Посмотреть сообщение
auto obj = factory::get("Worker1");
Обратил.
Мой цемес в том, что объектный пул, и мультитон - это разные вещи, для разных задач.

Цитата Сообщение от Serg046 Посмотреть сообщение
Ну, тут также дам ссылку на внешний источник, а не буду выдумывать свое определение...
никак не противоречит:
Цитата Сообщение от hoggy Посмотреть сообщение
Объектный пул создает столько экземпляров, сколько было запрошено.
Его задача - контролировать аллокацию объектов, и не более того.
Можно было бы конечно более точно сформулировать:
Объектный пул предоставляет столько экземпляров, сколько было запрошено.
Но думаю в этом нет необходимости, поскольку инкапсуляция, черный ящик,
и пользователю это не сильно интересно,
с его точки зрения эта штука создает ему объекты:

Цитата Сообщение от hoggy Посмотреть сообщение
auto obj = factory::create("Worker1");
То, что объект на самом деле может быть переиспользован,
а не создан "с нуля" - кухня самого пула,
и монопенисуальный фактор для клиентов.
0
21 / 21 / 6
Регистрация: 07.01.2010
Сообщений: 376
10.02.2015, 13:24
Цитата Сообщение от hoggy Посмотреть сообщение
Мой цемес в том, что объектный пул, и мультитон - это разные вещи, для разных задач.
Именно так, кто тут и где с этим спорит? = )
Цитата Сообщение от hoggy Посмотреть сообщение
То, что объект на самом деле может быть переиспользован,
а не создан "с нуля" - кухня самого пула,
и монопенисуальный фактор для клиентов.
Именно так и стоит сразу писать, а не это...
Цитата Сообщение от hoggy Посмотреть сообщение
Объектный пул создает столько экземпляров, сколько было запрошено
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2015, 13:24
Помогаю со студенческими работами здесь

Паттерн матчинг, как выкрутиться
Добрый день Есть у меня вот такой код в проекте: --доступные команды станка data Command = G0 Params | G1 Params | F...

Как вы используете паттерн Observer?
Я изучил этот паттерн и использовал его в своей программе. У меня класс Контроллер является Наблюдателем и создаёт observable объекты,...

Паттерн как исключить пробел
Добрый день. Подскажите как сделать проверку на наличие только символов a-zA-z написал такой код: public static boolean...

Как реализовать Observer паттерн
Необходимо реализовать Observer паттерн. Реализация через public void Publish&lt;TEvent&gt;(TEvent publishEvent); public void...

Как реализировать паттерн Memento?
Хочу реализировать паттерн memento .Моя проблема заключается в тому ,что я хочу сохранить состояние игры даже когда юзер закрыл игру ....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru