diff --git a/sjms/src/main/java/com/quinn/sjms/visitor/Element.java b/sjms/src/main/java/com/quinn/sjms/visitor/Element.java new file mode 100644 index 0000000..e4dfa47 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/visitor/Element.java @@ -0,0 +1,10 @@ +package com.quinn.sjms.visitor; + +public abstract class Element { + + //定义业务逻辑 + public abstract void doSomething(); + //允许谁来访问 + public abstract void accept(IVisitor visitor); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/visitor/ElementImpl.java b/sjms/src/main/java/com/quinn/sjms/visitor/ElementImpl.java new file mode 100644 index 0000000..e7916e2 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/visitor/ElementImpl.java @@ -0,0 +1,13 @@ +package com.quinn.sjms.visitor; + +public class ElementImpl extends Element { + @Override + public void doSomething() { + System.out.println("干饭"); + } + + @Override + public void accept(IVisitor visitor) { + visitor.visit(this); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/visitor/ElementStructure.java b/sjms/src/main/java/com/quinn/sjms/visitor/ElementStructure.java new file mode 100644 index 0000000..57a8b20 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/visitor/ElementStructure.java @@ -0,0 +1,9 @@ +package com.quinn.sjms.visitor; + +public class ElementStructure { + + public static Element createElement(){ + return new ElementImpl(); + } + +} diff --git a/sjms/src/main/java/com/quinn/sjms/visitor/IVisitor.java b/sjms/src/main/java/com/quinn/sjms/visitor/IVisitor.java new file mode 100644 index 0000000..ef8b0fb --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/visitor/IVisitor.java @@ -0,0 +1,12 @@ +package com.quinn.sjms.visitor; + +/** + * 抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法的参数定 + * 义哪些对象是可以被访问的。 + */ +public interface IVisitor { + + //可以访问哪些对象 + void visit(ElementImpl el1); + +} diff --git a/sjms/src/main/java/com/quinn/sjms/visitor/Visitor.java b/sjms/src/main/java/com/quinn/sjms/visitor/Visitor.java new file mode 100644 index 0000000..c0ca398 --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/visitor/Visitor.java @@ -0,0 +1,8 @@ +package com.quinn.sjms.visitor; + +public class Visitor implements IVisitor { + @Override + public void visit(ElementImpl el1) { + el1.doSomething(); + } +} diff --git a/sjms/src/main/java/com/quinn/sjms/visitor/VisitorClient.java b/sjms/src/main/java/com/quinn/sjms/visitor/VisitorClient.java new file mode 100644 index 0000000..019a4ff --- /dev/null +++ b/sjms/src/main/java/com/quinn/sjms/visitor/VisitorClient.java @@ -0,0 +1,11 @@ +package com.quinn.sjms.visitor; + +public class VisitorClient { + + public static void main(String[] args) { + Element element = ElementStructure.createElement(); + Visitor visitor = new Visitor(); + element.accept(visitor); + } + +}