diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/CodingCourse.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/CodingCourse.java new file mode 100644 index 0000000..92701ac --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/CodingCourse.java @@ -0,0 +1,21 @@ +package top.fjy8018.designpattern.pattern.behavior.visitor; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 实战课,包含价格 + * + * @author F嘉阳 + * @date 2020/7/22 10:20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class CodingCourse extends Course { + private int price; + + @Override + public void accept(IVisitor visitor) { + visitor.visit(this); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/Course.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/Course.java new file mode 100644 index 0000000..99ece6f --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/Course.java @@ -0,0 +1,15 @@ +package top.fjy8018.designpattern.pattern.behavior.visitor; + +import lombok.Data; + +/** + * @author F嘉阳 + * @date 2020/7/22 10:20 + */ +@Data +public abstract class Course { + private String name; + + public abstract void accept(IVisitor visitor); + +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/FreeCourse.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/FreeCourse.java new file mode 100644 index 0000000..eb72b4e --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/FreeCourse.java @@ -0,0 +1,20 @@ +package top.fjy8018.designpattern.pattern.behavior.visitor; + +/** + * 免费课 + * + * @author F嘉阳 + * @date 2020/7/22 10:20 + */ +public class FreeCourse extends Course { + + /** + * 接受策略 + * + * @param visitor + */ + @Override + public void accept(IVisitor visitor) { + visitor.visit(this); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/IVisitor.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/IVisitor.java new file mode 100644 index 0000000..825206a --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/IVisitor.java @@ -0,0 +1,14 @@ +package top.fjy8018.designpattern.pattern.behavior.visitor; + +/** + * 封装操作数据结构的方法 + * + * @author F嘉阳 + * @date 2020/7/22 10:20 + */ +public interface IVisitor { + + void visit(FreeCourse freeCourse); + + void visit(CodingCourse codingCourse); +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/Visitor.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/Visitor.java new file mode 100644 index 0000000..ffb761a --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/visitor/Visitor.java @@ -0,0 +1,35 @@ +package top.fjy8018.designpattern.pattern.behavior.visitor; + +/** + * 访问者 + * 核心:对不同类型产生不同的操作行为 + *
+ * jdk源码 {@link java.nio.file.FileVisitor} 实现对文件的访问
+ * spring源码 {@link org.springframework.beans.factory.config.BeanDefinitionVisitor} 遍历Bean具体属性并填充
+ *
+ * @author F嘉阳
+ * @date 2020/7/22 10:20
+ */
+public class Visitor implements IVisitor {
+
+ /**
+ * 访问免费课程,打印所有免费课程名称
+ *
+ * @param freeCourse
+ */
+ @Override
+ public void visit(FreeCourse freeCourse) {
+ System.out.println("免费课程:" + freeCourse.getName());
+ }
+
+ /**
+ * 访问实战课程,打印所有实战课程名称及价格
+ *
+ * @param codingCourse
+ */
+ @Override
+ public void visit(CodingCourse codingCourse) {
+ System.out.println("实战课程:" + codingCourse.getName() + " 价格:" + codingCourse.getPrice() + "元");
+ }
+
+}
diff --git a/src/test/java/top/fjy8018/designpattern/pattern/behavior/visitor/VisitorTest.java b/src/test/java/top/fjy8018/designpattern/pattern/behavior/visitor/VisitorTest.java
new file mode 100644
index 0000000..45dc0da
--- /dev/null
+++ b/src/test/java/top/fjy8018/designpattern/pattern/behavior/visitor/VisitorTest.java
@@ -0,0 +1,32 @@
+package top.fjy8018.designpattern.pattern.behavior.visitor;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author F嘉阳
+ * @date 2020/7/22 16:19
+ */
+class VisitorTest {
+
+ @Test
+ void visit() {
+ List