2011-01-16 2 views
0

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

Дело в том, что слушатель может использовать событие.

Вопрос приходит сюда. Базовый класс вызывается с информацией о событии. Он вызывает обратные вызовы для слушателей. Любой из них может обрабатывать событие.

Это означает, что пользователь должен проверить, было ли обработано событие или нет.

Ex:

void TextBox::MouseClick(MouseEvent &event) 
{ 
    Widget::MouseClick(event); 

    if(!event.isHandled()) 
    { 
     //do stuff 
    } 

} 

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

Это хороший дизайн? Если нет, что может быть лучше для этого?

Благодаря

+1

Какой сделать вы хотите знать, хороший ли дизайн? Сегмент вашего котируемого кода - довольно обычный способ. Вы могли бы найти «высокопоставленного посетителя» (проверьте google), чтобы быть интересным ... может быть. –

+0

ну, я предпочитаю бывшее с последнего, onMouseClick() кажется грязным – jmasterx

ответ

1

Если вы хотите, чтобы это для многих событий, я предпочел бы пойти на onMouseClick путь (IIUC):

void TextBox::onMouseClick(MouseEvent &event) 
{ 
     //do stuff or empty of not needed 
} 

в классе Widget:

void Widget::MouseClick(MouseEvent &event) // nonvirtual 
{ 
    // do the listeners' stuff 
    if(event.isHandled()) onMouseClick(event); 
} 
Смежные вопросы