我个人将使用Command方法。命令与模板方法很好地结合在一起,使您可以在所有命令对象上强制执行某些模式。例:
public abstract class Command {
public final Object execute(Map<String, Object> args) {
// do permission checking here or transaction management
Object retval = doExecute(args);
// do logging, cleanup, caching, etc here
return retval;
}
// subclasses override this to do the real work
protected abstract Object doExecute(Map<String, Object> args);
}
仅当您需要对那些您无法控制其设计,并且对于它们执行命令并不实际的类使用这种映射时,我才求助于反射。例如,您无法通过为每种方法创建命令来在命令外壳中公开Java API。