如何在Java中实现命令模式?

时间:2010-01-22 20:13:28

标签: java gwt

我看了"Google Web Toolkit Architecture: Best Practices for Architecting Your GWT App"并且我无法弄清楚服务器端应该如何工作。

幻灯片21显示:

/** The name Command is taken */
interface Action<T extends Response> { }

interface Response { }

interface ContactsService extends RemoteService {
  <T extends Response> T execute(Action<T> action);
}

interface ContactsServiceAsync {
  <T extends Response> void execute(Action<T> action,
      AsyncCallback<T> callback);
}

我认为这意味着我可以创建

public ResponseSubclass execute(ActionSubclass action) { ... }

和gwt会在匹配我的确切参数时选择该方法,但事实并非如此。目前我正在使用:

if (action.getClass().getName() == ActionSubclass.class.getName())
{
    return (T) execute((ActionSubclass)action);
}

但这意味着我每次添加动作时都必须继续向该方法添加ifs,并且我必须使用未经检查的强制转换。有没有更好的方法来使这项工作?

注意:从我在其他地方读到的内容来看,命令模式通常会包含要在Ac子类中执行的操作,但是因为这是为服务器传递客户端对象,所以执行操作必须分开。

3 个答案:

答案 0 :(得分:3)

结帐GWT-Dispatch以及如何使用here

顺便说一句,this可能是引用Ray Ryan的IO谈话并构建Hello World应用程序的最佳文章之一。该应用程序使用GWT-Dispatch。

-jP

答案 1 :(得分:0)

我正在将命令模式与访问者模式结合使用。这使得它类型安全且易于扩展。

服务器端所需的只是一个处理程序存储库,可以与Request对象匹配。有很多方法可以解决这个问题。访问者是一种方式,但您可以将映射基于命名约定,或者您可以使用注入框架将请求对象映射到该类型的处理程序。

答案 2 :(得分:0)

然后由服务器决定如何处理动作对象。正如其他人所说,gwt-dispatch是寻找这个故事的服务器端部分的好地方。