Ho una struttura ad albero di oggetti. Gli oggetti hanno diversi tipi, ma tutti sono ereditati dalla stessa classe base. Ora voglio inviare qualche tipo di oggetto comando ai nodi. L'oggetto comando ha l'indirizzo del nodo di destinazione e deve essere passato attraverso il nodo principale e i nodi intermedi fino a raggiungere il nodo di destinazione. Il nodo di destinazione accetta il comando e gli consente di eseguire alcune azioni sul nodo:
void Node::processCommand (Command& cmd) {
if(cmd.address == this->address)
cmd.execute(this);
else
child[cmd.address]->processCommand(cmd);
}
Prima domanda: è uno schema di comando, o può essere un po 'del suo genere?
Successivamente, considera di avere nodi di classi ClassA e ClassB e voglio inviare alcuni comandi agli oggetti di entrambe le classi, e alcuni comandi solo per oggetti di ClassB, qualcosa del genere:
class CommandForBoth {
void execute (BaseClass* obj) {
obj->doSomething();
}
}
class CommandForB {
void execute (ClassB* obj) {
obj->doSomethingSpecial();
}
}
È possibile implementarlo senza calchi e senza più metodi per passare comandi di tipi diversi, come:
void Node::processCommand (CommandForBoth& cmd);
void Node::processCommand (CommandForClassA& cmd);
void Node::processCommand (CommandForClassB& cmd);