我正在寻找将对象分派到正确的“目标”对象的最佳方法。
我有一个基本命令类: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);
我想使用访问者模式,因为我希望能够做一些大致如下的事情:
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;
}
}
}
谢谢