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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Nya
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 3
#1

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

27.11.2012, 11:37. Просмотров 1372. Ответов 6
Метки нет (Все метки)

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

Паттерн стратегия - C++
Всем привет! Начал изучать паттерны. Одним из наиболее понятных и интересных мне оказался паттерн Стратегия. Я начитался статей и...

паттерн и строка C++ - C++
Возникла необходимость производить поиск в строке по паттерну, который может содержать символ '*' и '?'.Например: искать в строке "abcdefg"...

Паттерн Embedded Value - C++
Доброго времени суток, вопрос по паттерну Embedded Value (объединенное свойство). Это тема моей курсовой, нашел про него немного теории, да...

Паттерн декоратор - C++
доброго времени суток уважаемые форумчане, помогите пожалуйста разобраться, где я допустил ошибку? суть программы в том что бы слова...

Паттерн Builder - C++
Вот у меня есть код примера реализации паттерна Builder(другие примеры не предлагать). В классе Army надо как-то исправить код так, чтобы...

Паттерн Singleton - C++
Здравствуйте. Например есть класический одиночка и загрузка музыки. Возможно ли сделать загрузку и вопроизведение музыки через класс...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
XRuZzz
Антикодер
671 / 572 / 28
Регистрация: 15.09.2012
Сообщений: 2,519
27.11.2012, 12:19 #2
посмотрите в вики Мост
Я этот этот паттерн не использовал. Но вы напишите хоть какой нить код ( с 2-мя абстрактными классами) и какой нить код, который хоть как-то имитирует нужные действия, которые вы будете использовать для плеера. Обсудим, разберёмся вместе.

а лучше нарисуйте диаграмму классов для вашего случая с паттерном bridge
XRuZzz
Антикодер
671 / 572 / 28
Регистрация: 15.09.2012
Сообщений: 2,519
27.11.2012, 13:07 #3
короче я уже сам успел нарисовать свою версию реализации.
думаю остаётся только в код добавить
C++
1
2
3
4
Player::selectInterface()
{
    pInterface->changeInterface();
}
хотя я могу ошибаться
Миниатюры
Паттерн Bridge  
Nya
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 3
28.11.2012, 22:07  [ТС] #4
да, моя диаграмма классов выглядит похожей на Вашу.
честно говоря, совсем не понял тот кусок кода, который Вы привели..
в моей программе должно быть всего 5 классов. дело в том, что я даже сымитировать не могу их работу, потому что не представляю как должно все выглядеть. правильно я понимаю что должно быть так: сперва в коде идут классы по порядку, содержащие переменные тип void и ссылающиеся друг на друга, а потом уже та часть программы, которая уже у меня написана, то есть действие всех кнопок по щелчку. а сами классы никакого смысла тогда вообще не будут иметь?
у меня например на действии кнопки Play (onButtonPlayClick) описывается пользовательская функция my_play(), которая является по сути одной из основных функциц. тогда абстрактный класс Player должен содержать в себе строку virtual void my_play() или нет? и еще, подскажите пожалуйста, каким образом можно в одном классе сослаться на другой так, как это требует паттерн?
спасибо Вас за Ваши ответы. если написал непонятно, то могу попробовать подробней спросить.
XRuZzz
Антикодер
671 / 572 / 28
Регистрация: 15.09.2012
Сообщений: 2,519
28.11.2012, 23:43 #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  [ТС] #6
Большое спасибо за Ваши ответы. буду пробовать разбираться. надеюсь, Вы не против, что, если не получится, я к Вам снова обращусь?
XRuZzz
Антикодер
671 / 572 / 28
Регистрация: 15.09.2012
Сообщений: 2,519
29.11.2012, 22:54 #7
за мощные магнитики не против
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2012, 22:54
Привет! Вот еще темы с ответами:

Паттерн Singleton - C++
Мне вот дали такой код как паттерн Singleton: #include "stdafx.h" template <class T> class SingletonS { static int...

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

Паттерн Interpreter и грамматика - C++
Может не особо по теме C++, но все же. Столкнулся с некоторой трудностью. Читал про паттерн Interpreter, который, вроде как , служит для...

Паттерн проектирования «Фасад» - C++
Здравствуйте. Можете по простому объяснить про паттерн проектирования «Фасад», его плюсы, минусы, для чего он...Читая на различных сайтах...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.11.2012, 22:54
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru