왜 그렇게하기 위해 라이브러리가 필요합니까?
도메인 개체 그래프를 지정하면 다른 방문자 구현에서 도메인 개체를 방문 할 수 있도록 관련 인터페이스를 정의하고 구현해야하는 이유는 무엇입니까? 구현 중 하나는 (사용자가 지정한대로) 각 ID를 null
으로 재설정 할 수 있습니다.
예
첫째로 방문자 방문하거나 행동 할 수있는 오브젝트에 의해 구현 될 수있는 인터페이스를 정의한다.
public interface Visitable {
void visit(Visitor visitor);
}
public interface Visitor {
void visitDomainObjectA(DomainObjectA obj);
void visitDomainObjectB(DomainObjectB obj);
}
이제 두 개의 도메인 개체 클래스를 모두 정의 할 수 있습니다. 둘 다 방문 할 수 있습니다.
public abstract class DomainObject implements Visitable {
private Object id;
public Object getId() { return this.id; }
public void setId(Object id) { this.id = id; }
}
public class DomainObjectA extends DomainObject {
public void visit(Visitor visitor) {
visitor.visitDomainObjectA(this);
}
}
public class DomainObjectB extends DomainObject {
public void visit(Visitor visitor) {
visitor.visitDomainObjectB(this);
}
}
지금 유용한 무언가를 구체적인 방문자 구현을 정의
public class MyVisitor implements Visitor {
public void visitDomainObjectA(DomainObjectA doa) {
doa.setId(null);
}
public void visitDomainObjectB(DomainObjectB dob) {
doa.setId(UUID.randomUUID());
}
}
+1, 재미있는 질문! –