代码之家  ›  专栏  ›  技术社区  ›  Asa Ayers

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

  •  2
  • Asa Ayers  · 技术社区  · 14 年前

    我看着 "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 回复  |  直到 14 年前
        1
  •  3
  •   JP Richardson    14 年前

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

    顺便说一下, this 可能是引用RayRyan的IO Talk并构建HelloWorld应用程序的最佳文章之一。应用程序使用GWT调度。

    JP

        2
  •  0
  •   David Nouls    14 年前

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

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

        3
  •  0
  •   AlexJReid    14 年前

    然后由服务器决定如何处理操作对象。正如其他人所说,GWT调度是一个很好的地方,可以在这里查找本文的服务器端部分。