Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Nya
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 3
1

Паттерн Bridge

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

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

Вызов деструктора в Lua Bridge
Здравствуйте, всем. пишу класс в LuaBridge. скажите, как правильно вызвать деструктор. ...

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

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

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

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

6
XRuZzz
Антикодер
1683 / 786 / 46
Регистрация: 15.09.2012
Сообщений: 2,898
27.11.2012, 12:19 2
посмотрите в вики Мост
Я этот этот паттерн не использовал. Но вы напишите хоть какой нить код ( с 2-мя абстрактными классами) и какой нить код, который хоть как-то имитирует нужные действия, которые вы будете использовать для плеера. Обсудим, разберёмся вместе.

а лучше нарисуйте диаграмму классов для вашего случая с паттерном bridge
1
XRuZzz
Антикодер
1683 / 786 / 46
Регистрация: 15.09.2012
Сообщений: 2,898
27.11.2012, 13:07 3
короче я уже сам успел нарисовать свою версию реализации.
думаю остаётся только в код добавить
C++
1
2
3
4
Player::selectInterface()
{
    pInterface->changeInterface();
}
хотя я могу ошибаться
1
Миниатюры
Паттерн 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() или нет? и еще, подскажите пожалуйста, каким образом можно в одном классе сослаться на другой так, как это требует паттерн?
спасибо Вас за Ваши ответы. если написал непонятно, то могу попробовать подробней спросить.
0
XRuZzz
Антикодер
1683 / 786 / 46
Регистрация: 15.09.2012
Сообщений: 2,898
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. не забывайте про изучение описания требований к ПО.
1
Nya
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 3
29.11.2012, 19:57  [ТС] 6
Большое спасибо за Ваши ответы. буду пробовать разбираться. надеюсь, Вы не против, что, если не получится, я к Вам снова обращусь?
0
XRuZzz
Антикодер
1683 / 786 / 46
Регистрация: 15.09.2012
Сообщений: 2,898
29.11.2012, 22:54 7
за мощные магнитики не против
1
29.11.2012, 22:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2012, 22:54

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

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

Паттерн Builder
Вот у меня есть код примера реализации паттерна Builder(другие примеры не предлагать). В классе...


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

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

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