我有一个想法,它是这样的:
在访问者模式中,我们有一个操作类,所有这些都继承了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。另外,它们不包含任何数据。是否有可能将访问者对象中应该调用哪种方法的知识从服务传递到客户端?
答案 0 :(得分:1)
请求工厂只能移动数据(EntityProxy
和/或ValueProxy
),并要求服务器代表客户端执行操作({{1} })。
要传输操作,客户端和服务器首先需要分享可以执行的操作的知识。
然后你有两个解决方案:
答案 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);
}
}
然后我定义了执行适当操作的访问者的实现。
以这种方式定义它是很重要的,这样访问者所做的事情的逻辑就是在课堂外部。在此之前,每个实现都有不同的访问者实现,因此更改行为更加困难。
我认为这将解决您的问题,因为现在该做什么的逻辑是外部化给访问者。