Шаблон проектирования должен следовать в следующем случае

0

Я создаю приложение на основе одной вкладки 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 и некоторый триггер событий из webview. Я могу сделать требуемое на панели инструментов (например, включение/отключение кнопки остановки)

Какую схему проектирования мне нужно выполнить в этом сценарии?

ПРИМЕЧАНИЕ. GTK+ - это библиотека на основе c.

  • 0
    Я думаю, вы ищете шаблон командования. Я использую его в своей игре TD, когда я хочу выполнить команду на карте, то, что было выбрано в пользовательском интерфейсе (например: BuildTower, CastSpell и т. Д.)
Теги:
design-patterns
webkit
gtk

2 ответа

0

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

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

Изучение шаблонов дизайна полезно в предоставлении лексики для обсуждения ваших проектов, и они полезны для вдохновляющих и информирующих вас о выборе дизайна, но ваш подход к дизайну всегда должен быть "самым простым, чистым, самым эффективным идиоматическим подходом". Иногда ответ на этот вопрос будет шаблоном проектирования. Иногда это будет частью шаблона проектирования, и иногда это будет намного проще - обычно это идиома на языке или библиотеке, с которой вы работаете.

Я не очень много программирую GUI, поэтому я не могу много помочь с вашим конкретным вопросом. Для проблемы, которую вы представляете, это похоже на то, что вы хотите использовать интерфейс GTK signal/slot. В качестве альтернативы вы можете предложить аналогичную функциональность, если хотите познакомиться с инструментами повышения. Оба будут идиоматическими подходами к тому, что вы хотите сделать.

  • 0
    Спасибо за ваше ценное предложение, я имейте это в виду. Я начал писать код, но потом понял, что у меня есть большая проблема в подходе, потому что я передавал ссылки по всему. Я попадаю в ситуацию, когда у меня есть одна панель инструментов и несколько видов, и мне нужно обновить панель инструментов в соответствии с текущим выбором вида. Кто-то здесь предложил мне, что MVC - это то, что мне нужно. Давайте посмотрим, как далеко я пойду, я учусь писать чистый, абстрактный и смысловой код.
-2

Я думаю, что то, что вы ищете, - это нечто похожее на шаблон наблюдателя: 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/вики /Presentation% E2% 80% 93abstraction% E2% 80% 93control

Возможно, вы захотите также взглянуть на реализацию Qt Signal/Slot: http://qt-project.org/doc/qt-4.8/signalsandslots.html

  • 0
    OP использует GTK +, поэтому у него уже есть отличные сигналы / слоты с безопасностью типов и без лишних затрат времени выполнения. Использование сигналов qt будет большим шагом назад!
  • 0
    Я думаю, что MVC - это то, что мне нужно. Потому что у меня есть одна панель инструментов (элементы панели инструментов) и много вкладок. При смене вкладки я должен обновить панель инструментов, а по действию панели инструментов - обновить веб-представление.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню