Как взаимодействуют два объекта (например, внутри) - PullRequest
1 голос
/ 31 июля 2011

Если двое детей имеют одного и того же родителя, как событие, инициированное одним ребенком, обрабатывается вторым ребенком.

Итак, пример:

TrackerContainer является родителем Tracker и TrackerPanel. TrackerPanel является родителем PlayButton. Tracker является классом, подобным таймеру, и имеет метод stop (). В PlayButton есть метод активации () и деактивация ().

Как вызов метода stop () из Tracker вызывает метод deactivate () из PlayButton (). Я думал о том, чтобы иметь время для отслеживания встреч в классе TrackerContainer, но это не так.

РЕДАКТИРОВАТЬ Вот это в коде (кстати, JavaScript):

function TrackerContainer
{
   this.display = new Tracker();
   this.panel = new TrackerPanel();
}

function Tracker
{
   this.play = function() { /* yada */ }
   this.stop = function() { /* yada */ }
}

function TrackerPanel
{
   this.playButton = new PlayButton();
}

function PlayButton
{
   this.activate = function() { /* method called when Tracker is playing */ }
   this.deactivate = function() { /* method called when Tracker is stopped */ }
}

Ответы [ 2 ]

1 голос
/ 31 июля 2011

Вы не указали язык, поэтому мы поговорим в общих чертах.Это шаблон Модель-Вид-Контроллер.Ваш PlayButton является представлением.Ваш Tracker - это модель, а TrackerContainer - это контроллер (я полагаю, это может быть представление, в этом случае у вас должен быть отдельный объект контроллера).

Работа представления заключается в отображении объектов.Работа модели - отслеживать данные.Координаты контроллера между ними.

Для этой задачи вам, вероятно, понадобится шаблон Observer.Контроллер наблюдает за моделью и обновляет представление по мере необходимости.Один из способов реализации шаблона Observer - использование делегата или слушателя.Вы создаете интерфейс с именем TrackerListener, которому соответствует TrackerContainer, с такими методами, как trackerDidStart() и trackerDidStop().Tracker HAS-A TrackerListener и вызывает методы слушателя всякий раз, когда изменяется состояние.TrackerContainer затем обновляет состояние кнопки.

1 голос
/ 31 июля 2011

Самое простое решение - передать Tracker экземпляр PlayButton.Трекер, в stop() будет вызывать playbutton.deactivate().Если это заставляет вас чувствовать себя более совместимыми, вы можете заставить PlayButton реализовать деактивируемый интерфейс, с которым будет работать трекер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...