Форум программистов, компьютерный форум CyberForum.ru

Паттерн Bridge - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Nya
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 3
27.11.2012, 11:37     Паттерн Bridge #1
нужно написать аудиоплеер, используя паттерн Bridge, с помощью которого надо реализовать возможность смены интерфейса. с паттернами я не в ладах, но как понял нужно создать 2 абстрактных класса Player и PlayerMode (класс плеер должен хранить ссылку на второй класс и на класс ConcretePlayer, который будет уточнять интерфейс абстракции). я знаю, как написать сам плеер со всеми нужными мне функциями, включая смену интерфейса. но прошу подсказать, как мне сделать эту программу в контексте паттерна? (задание в университете). спасибо всем кто ответит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 11:37     Паттерн Bridge
Посмотрите здесь:

паттерн и строка C++ C++
C++ Паттерн Builder
C++ Паттерн декоратор
Паттерн стратегия C++
C++ Паттерн Interpreter и грамматика
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
27.11.2012, 12:19     Паттерн Bridge #2
посмотрите в вики Мост
Я этот этот паттерн не использовал. Но вы напишите хоть какой нить код ( с 2-мя абстрактными классами) и какой нить код, который хоть как-то имитирует нужные действия, которые вы будете использовать для плеера. Обсудим, разберёмся вместе.

а лучше нарисуйте диаграмму классов для вашего случая с паттерном bridge
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
27.11.2012, 13:07     Паттерн Bridge #3
короче я уже сам успел нарисовать свою версию реализации.
думаю остаётся только в код добавить
C++
1
2
3
4
Player::selectInterface()
{
    pInterface->changeInterface();
}
хотя я могу ошибаться
Миниатюры
Паттерн Bridge  
Nya
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 3
28.11.2012, 22:07  [ТС]     Паттерн Bridge #4
да, моя диаграмма классов выглядит похожей на Вашу.
честно говоря, совсем не понял тот кусок кода, который Вы привели..
в моей программе должно быть всего 5 классов. дело в том, что я даже сымитировать не могу их работу, потому что не представляю как должно все выглядеть. правильно я понимаю что должно быть так: сперва в коде идут классы по порядку, содержащие переменные тип void и ссылающиеся друг на друга, а потом уже та часть программы, которая уже у меня написана, то есть действие всех кнопок по щелчку. а сами классы никакого смысла тогда вообще не будут иметь?
у меня например на действии кнопки Play (onButtonPlayClick) описывается пользовательская функция my_play(), которая является по сути одной из основных функциц. тогда абстрактный класс Player должен содержать в себе строку virtual void my_play() или нет? и еще, подскажите пожалуйста, каким образом можно в одном классе сослаться на другой так, как это требует паттерн?
спасибо Вас за Ваши ответы. если написал непонятно, то могу попробовать подробней спросить.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
28.11.2012, 23:43     Паттерн Bridge #5
А какая разница какого типа у нас методы? я обычно избегаю типа void, потому что любой метод должен иметь выход, чтобы быть похожим на черный ящик.

Событие onButtonPlayClick как бы навязывает нам среда программирования. Надо стараться писать в консольном стиле(чтобы не отвлекаться на такие события)

Моя диаграмма предполагает, что вы например вызываете событие onButtonChangeInterfaceClick, оно принадлежит как бы "клиенту" которого у меня нет на диаграмме, как в вики
например это класс Form тогда у нас есть обработчик события типа
файл Form.h
C++
1
2
3
4
5
6
class Form
{
   ....
   private:
      ConcretePlayer pl;                   // Надеюсь суть отношения ясна, объявляем в классе объект ConcretePlayer 
}
файлForm.c
C++
1
2
3
4
5
6
Form::onButtonChangeInterfaceClick()
{
    ConcretePlayerInterfaceA aInterface;        // Создаем объект для вызова виртуального метода
    pl.setPInterface(&aInterface);                   // Сообщаем объекту pl что мы хотим вызвать метод класса ConcretePlayerInterfaceA
    pl.selectInterface();                                 // В этом методе вызовем виртуальный метод changeInterface, думаю что это и будет нашим мостом
}
Агрегация в моём понимании это когда у Player есть указатель на PlayerInterface(что и детально показано на диаграмме.)

файл Player.h
C++
1
2
3
4
5
class Player
{
   private:
      PlayerIterface *pInterface;
}
я надеюсь экперты проверят мои доводы, я могу ошибаться.

Подучите полиморфизм в C++. Поизучайте UML. не забывайте про изучение описания требований к ПО.
Nya
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 3
29.11.2012, 19:57  [ТС]     Паттерн Bridge #6
Большое спасибо за Ваши ответы. буду пробовать разбираться. надеюсь, Вы не против, что, если не получится, я к Вам снова обращусь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2012, 22:54     Паттерн Bridge
Еще ссылки по теме:

Паттерн Singleton C++
C++ Паттерн Embedded Value
Как реализовать паттерн C++

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

Или воспользуйтесь поиском по форуму:
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
29.11.2012, 22:54     Паттерн Bridge #7
за мощные магнитики не против
Yandex
Объявления
29.11.2012, 22:54     Паттерн Bridge
Ответ Создать тему
Опции темы

Текущее время: 07:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru