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();
}
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
- 因为客户机必须预先知道每一个可能的操作,所以创建一个枚举或任何东西来标识每个操作,并将这些标识符传输给客户机,客户机将把它们映射回要执行的具体操作