Subject.java package com.visitor; public interface Subject { public void accept(Visitor visitor); public String getSubject(); } Visitor.java package com.visitor; public interface Visitor { public void visit(Subject subject); } MyVisitor.java package com.visitor; public class MyVisitor implements Visitor{ @Override public void visit(Subject subject) { System.out.println("test"); } } MySubject.java package com.visitor; public class MySubject implements Subject{ @Override public void accept(Visitor visitor) { visitor.visit(this); } @Override public String getSubject() { return "test1"; } }