Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于GWT的访问者设计模式_Java_Gwt_Visitor Pattern_Proxy Pattern - Fatal编程技术网

Java 基于GWT的访问者设计模式

Java 基于GWT的访问者设计模式,java,gwt,visitor-pattern,proxy-pattern,Java,Gwt,Visitor Pattern,Proxy Pattern,我有一个想法,它是这样的: public interface Action { void act(Visitor visitor); } public class PerfectAction implements Action { void act(Visitor visitor) { visitor.bePerfect(); } } public class VisibleAction implements Action { void ac

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

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();
}
  • 在服务端解析文件
  • 根据文件内容创建操作列表
  • 将操作列表传递给客户端
  • 让客户机根据列表中的项目定义并执行操作
  • 在访问者模式中,我们有一个操作类,所有操作都继承操作接口。然后,客户机将实现访问者。在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接口创建代理类。它们不包含setter和/或getter。此外,它们不包含任何数据。有没有可能将应该在访问者对象上调用哪个方法的知识从服务传递到客户端?

    我认为这不是实现访问者模式的方式。我会这样做

    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);
        }
    }
    
    然后我将定义执行适当操作的访问者的实现

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


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

    我不认为这是实现访问者模式的方式。我会这样做

    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);
        }
    }
    
    然后我将定义执行适当操作的访问者的实现

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


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

    请求工厂只能四处移动数据(
    EntityProxy
    和/或
    ValueProxy
    ),并要求服务器代表客户端做事情(
    RequestContext

    要传输操作,客户机和服务器首先需要共享可以执行的操作的知识

    然后有两种解决方案:

    • 移到GWT-RPC
    • 因为客户机必须预先知道每一个可能的操作,所以创建一个枚举或任何东西来标识每个操作,并将这些标识符传输给客户机,客户机将把它们映射回要执行的具体操作

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

    要传输操作,客户机和服务器首先需要共享可以执行的操作的知识

    然后有两种解决方案:

    • 移到GWT-RPC
    • 因为客户机必须预先知道每一个可能的操作,所以创建一个枚举或任何东西来标识每个操作,并将这些标识符传输给客户机,客户机将把它们映射回要执行的具体操作

    问题不在于模式本身。如果我对访问者模式定义的理解是错误的,那么这与问题无关。主要问题是如何在GWT内部传输接口。将接口传输到GWT(或使其可用于GWT类)的唯一方法是对GWT类进行子类化,并使用访问者方法对其进行扩展。你是说子类ValueProxy还是EntityProxy?问题不在于模式本身。如果我对访问者模式定义的理解是错误的,那么这与问题无关。主要问题是如何在GWT内部传输接口。将接口传输到GWT(或使其可用于GWT类)的唯一方法是对GWT类进行子类化,并使用visitor方法对其进行扩展。您是指子类ValueProxy还是EntityProxy?