访客设计模式与GWT

时间:2012-09-06 09:14:34

标签: java gwt visitor-pattern proxy-pattern

我有一个想法,它是这样的:

  1. 在服务端解析文件。
  2. 根据文件内容创建操作列表。
  3. 将操作列表传递给客户端。
  4. 让客户根据列表中的项目定义并执行操作。
  5. 在访问者模式中,我们有一个操作类,所有这些都继承了Action接口。然后客户端将实现访问者。在Java中它就是这样的:

    public interface Action {
        void act(Visitor visitor);
    }
    
    public class PerfectAction implements Action {
        void act(Visitor visitor) {
             visitor.bePerfect();
        }
    }
    
    public class VisibleAction implements Action {
        void act(Visitor visitor) {
             visitor.beVisible();
        }
    }
    
    public interface Visitor {
        void bePerfect();
        void beVisible();
    }
    

    问题
    我无法为Action和Visitor接口创建Proxy类。它们不包含setter和/或getter。另外,它们不包含任何数据。是否有可能将访问者对象中应该调用哪种方法的知识从服务传递到客户端?

2 个答案:

答案 0 :(得分:1)

请求工厂只能移动数据EntityProxy和/或ValueProxy),并要求服务器代表客户端执行操作({{1} })。

要传输操作,客户​​端和服务器首先需要分享可以执行的操作的知识。

然后你有两个解决方案:

  • 转到GWT-RPC
  • 因为客户端必须事先知道每个可能的操作,创建枚举或其他任何标识每个操作,并将这些标识符传递给客户端,客户端将把它们映射回具体的操作来执行。

答案 1 :(得分:0)

我认为这不是你实现访客模式的方式。我会做这样的事情

public interface ActionVisitor {
  void visit(VisibleAction va);
  void visit(PerfrectAction pa);
}

public class PerfectAction implements Action {
    void act(Visitor visitor) {
       visitor.visit(this);
    }
}

public class VisibleAction implements Action {
    void act(Visitor visitor) {
        visitor.visit(this);
    }
}

然后我定义了执行适当操作的访问者的实现。

以这种方式定义它是很重要的,这样访问者所做的事情的逻辑就是在课堂外部。在此之前,每个实现都有不同的访问者实现,因此更改行为更加困难。

我认为这将解决您的问题,因为现在该做什么的逻辑是外部化给访问者。