Я ищу лучший способ отправки объектов в правильный «целевой» объект.Какой шаблон дизайна/RTTI
У меня есть базовый командный класс: Cmd, два подкласса: BufferCmd и StateCmd. Команда «GotoLine» выводится из BufferCmd, а «ChangeCmd» - из StateCmd. BufferCmds предназначены для перехода к классу Buffer, а StateCmds предназначены для перехода к объекту State.
Я в настоящее время паттерн посетитель настроен так, что я могу сделать что-то вроде:
Buffer buffer;
State state;
Cmd *c;
GotoLineCmd gotoCmd = new GotoLineCmd (15);
ChangeCmd changeCmd = new ChangeCommand (...)
c = &gotoCmd;
c->accept (buffer);
c = &changeCmd;
c->accept (state);
Я хочу использовать шаблон Visitor, потому что я хотел бы быть в состоянии сделать что-то примерно так:
Cmd *cmds [5];
cmds [0] = new GotoLineCmd (...);
cmds [1] = new CopyLineCmd (...);
cmds [2] = new PasteCmd (...);
foreach (Cmd *c in cmds) {
c->accept (buffer);
}
К сожалению, для этого мне нужно знать, к какому объекту отправить команду. Я хотел бы иметь возможность сделать что-то вроде этого:
Derive Buffer from Commandable
Derive State from Commandable
Commandables *commandables [1] = {new Buffer(), new State() };
// Then have the foreach type statement look like:
foreach (Cmd *c in cmds) {
c->accept (commandables);
}
Есть ли образец, наиболее подходящий для такого рода ситуаций? Должен ли я использовать шаблон посетителя? Очевидные Я хочу, чтобы избежать этого:
foreach (Cmd *c in cmds) {
foreach (Commandable *cmdAbles in commandables) {
if (c->accept (commandables)) {
// Okay command accepted...
break;
}
}
}
Благодаря