Шаблон проектирования должен следовать в следующем случае
Я создаю одно приложение на основе вкладок C++, используя GTK+ инструментарий и Webkit для целей обучения. Я создал следующие файлы
- Main.cpp => Точка входа в приложение
- MainWindow.cpp/.h => MainWindow, который создает объект панели инструментов, Блокнот, Панель состояния
- Toolbar.cpp/.h => элементы панели инструментов, такие как back, forward, urlbar, stop / refresh,
- NotebookContainer.cpp /.h => для создания новой вкладки и т. Д.
- TabWebView.cpp/.h => для создания вкладки (метка + кнопка закрытия), веб-просмотра и т. Д.
Теперь я хочу общаться между панелью инструментов и классом TabView. Поэтому, когда на панели инструментов происходит какое-либо событие, я могу выполнить действие в webview.cpp, а некоторый триггер события из веб-просмотра - на панели инструментов (например, включить / отключить кнопку остановки).
Какому шаблону проектирования я должен следовать в этом сценарии?
ПРИМЕЧАНИЕ: GTK+ это библиотека на основе c.
2 ответа
Я хотел бы предположить, что вы задаете неправильный вопрос. Вместо того, чтобы спрашивать, какой шаблон проектирования следует использовать, я бы посоветовал вам спросить, какой самый идиоматичный способ решить вашу проблему.
Слишком часто неудачи в разработке дизайна, которые я должен исправить, происходят от молодого программиста, чей подход "какой шаблон проектирования я могу использовать здесь?" Или "Как я могу использовать больше шаблонов проектирования".
Изучение шаблонов дизайна полезно для предоставления словаря для обсуждения ваших дизайнов, и они полезны для того, чтобы вдохновлять и информировать ваши дизайнерские решения, но ваш подход к дизайну всегда должен быть "какой самый простой, самый чистый, самый эффективный, идиоматический подход здесь". Иногда ответом на этот вопрос будет шаблон проектирования. Иногда это будет частью шаблона проектирования, а иногда это будет что-то гораздо более простое - обычно идиома языка или библиотеки, с которой вы работаете.
Я не много занимаюсь программированием с использованием графического интерфейса, поэтому я не могу помочь с вашим конкретным вопросом. Для проблемы, которую вы представляете, звучит так, как будто вы хотите использовать структуру сигналов / слотов GTK. Кроме того, Boost предлагает аналогичные функции, если вы хотите ознакомиться с инструментами Boost. Оба были бы идиоматическими подходами к тому, что вы хотите сделать.
Я думаю, что вы ищете что-то вроде шаблона наблюдателя: http://sourcemaking.com/design_patterns/observer
и, в общем, что-то вроде моделей Model-View-Controller или Presentation-Abstraction-Control: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller http://en.wikipedia.org/wiki/Presentation%E2%80%93abstraction%E2%80%93control
Возможно, вы захотите взглянуть и на реализацию Qt Signal/Slot: http://qt-project.org/doc/qt-4.8/signalsandslots.html