一种接口可以处理多种事务
/*v1.0*/
class A{
...
execute(){
if(cmd==conditon1){
...
}
...
else if(cmd==condition){
...
}
}
...
}
/************************/
class B{
execute(){
class A a;
...
a.execute();
...
}
}
/*v2.0*/
class A{
...
execute();
...
}
class A1:public A{
type1 sth;
...
execute(){
...
handle(sth1);
}
...
}
...
class An:public A{
type1 sth;
...
execute(){
...
handle(sthN);
}
...
}
/************************/
class B{
...
class A command;
B(class A a){
command=a;
}
setCommand(class A a){
command=a;
}
execute(){
...
command.execute();
...
}
...
}
还可以有命令队列:
/*v2.5*/
class A{
...
execute();
...
}
class A1:public A{
...
execute();
...
}
...
class An:public A{
...
execute();
...
}
/************************/
class B{
...
list<class A> command;
addCommand(class A a){
command.add(a);
}
removeCommand(class A a){
command.remove(a);
}
execute(){
for(command in command){
command.execute();
}
}
...
}
还可以有撤销操作:
/*v2.4*/
class A{
...
execute(v){...}
undo(){...}
...
}
class A1:public A{
private data value;
...
execute(v){
value=v;
...
}
undo(){
...
}
...
}
...
class An:public A{
private data value;
...
execute(){...}
undo(){...}
...
}
/************************/
class B{
...
class A command;
B(class A a){
command=a;
}
setCommand(class A a){
command=a;
}
execute(v){
...
command.execute(v);
...
}
undo(){
command.undo();
}
...
}