From 4a97bb9e2a36fbcaba6441e13d2a5ef555c13d2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Fri, 6 Mar 2020 16:41:18 +0800 Subject: [PATCH] =?UTF-8?q?Guava=E5=AE=9E=E7=8E=B0=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../behavior/observer/guava/Course.java | 31 ++++++++++++++++ .../behavior/observer/guava/CourseEvent.java | 15 ++++++++ .../behavior/observer/guava/Question.java | 20 ++++++++++ .../behavior/observer/guava/Teacher.java | 28 ++++++++++++++ .../behavior/observer/GuavaEventTest.java | 24 ------------ .../observer/guava/GuavaEventTest.java | 37 +++++++++++++++++++ 6 files changed, 131 insertions(+), 24 deletions(-) create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Course.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/CourseEvent.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Question.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Teacher.java delete mode 100644 src/test/java/top/fjy8018/designpattern/pattern/behavior/observer/GuavaEventTest.java create mode 100644 src/test/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/GuavaEventTest.java diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Course.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Course.java new file mode 100644 index 0000000..27447f7 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Course.java @@ -0,0 +1,31 @@ +package top.fjy8018.designpattern.pattern.behavior.observer.guava; + +import com.google.common.eventbus.EventBus; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * 课程 + * 被观察者类 + * + * @author F嘉阳 + * @date 2020/3/5 15:23 + */ +@Slf4j +@Getter +@AllArgsConstructor +public class Course extends EventBus { + + private String courseName; + + /** + * 产生问题 + * + * @param event + */ + public void produceQuestion(CourseEvent event) { + String msg = String.format("%s在%s提交了一个问题", event.getQuestion().getUsername(), event.getCourse().getCourseName()); + post(event); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/CourseEvent.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/CourseEvent.java new file mode 100644 index 0000000..5113079 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/CourseEvent.java @@ -0,0 +1,15 @@ +package top.fjy8018.designpattern.pattern.behavior.observer.guava; + +import lombok.Data; + +/** + * @author F嘉阳 + * @date 2020/3/6 16:33 + */ +@Data +public class CourseEvent { + + private Course course; + + private Question question; +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Question.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Question.java new file mode 100644 index 0000000..16fdcfa --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Question.java @@ -0,0 +1,20 @@ +package top.fjy8018.designpattern.pattern.behavior.observer.guava; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 课程问题 + * + * @author F嘉阳 + * @date 2020/3/5 15:23 + */ +@Getter +@AllArgsConstructor +public class Question { + + private String username; + + private String content; + +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Teacher.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Teacher.java new file mode 100644 index 0000000..7c53478 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/Teacher.java @@ -0,0 +1,28 @@ +package top.fjy8018.designpattern.pattern.behavior.observer.guava; + +import com.google.common.eventbus.Subscribe; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * 老师实体 + *

+ * 老师观察课程是否产生了新的问题 + * + * @author F嘉阳 + * @date 2020/3/5 15:24 + */ +@Slf4j +@Getter +@AllArgsConstructor +public class Teacher { + + private String teacherName; + + @Subscribe + public void update(CourseEvent event) { + log.info("{}老师的{}课程接收到一个{}提交的问题,内容为:{}", + teacherName, event.getCourse().getCourseName(), event.getQuestion().getUsername(), event.getQuestion().getContent()); + } +} diff --git a/src/test/java/top/fjy8018/designpattern/pattern/behavior/observer/GuavaEventTest.java b/src/test/java/top/fjy8018/designpattern/pattern/behavior/observer/GuavaEventTest.java deleted file mode 100644 index fa7d48e..0000000 --- a/src/test/java/top/fjy8018/designpattern/pattern/behavior/observer/GuavaEventTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package top.fjy8018.designpattern.pattern.behavior.observer; - -import com.google.common.eventbus.EventBus; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Test; -import top.fjy8018.designpattern.pattern.behavior.observer.guava.GuavaEvent; - -/** - * @author F嘉阳 - * @date 2020/3/5 15:58 - */ -@Slf4j -class GuavaEventTest { - - @Test - void subscribe() { - EventBus eventBus = new EventBus(); - GuavaEvent event = new GuavaEvent(); - // 注册 - eventBus.register(event); - eventBus.post("提交事件的内容"); - } - -} \ No newline at end of file diff --git a/src/test/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/GuavaEventTest.java b/src/test/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/GuavaEventTest.java new file mode 100644 index 0000000..15840a3 --- /dev/null +++ b/src/test/java/top/fjy8018/designpattern/pattern/behavior/observer/guava/GuavaEventTest.java @@ -0,0 +1,37 @@ +package top.fjy8018.designpattern.pattern.behavior.observer.guava; + +import com.google.common.eventbus.EventBus; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +/** + * @author F嘉阳 + * @date 2020/3/5 15:58 + */ +@Slf4j +class GuavaEventTest { + + @Test + void subscribe() { + EventBus eventBus = new EventBus(); + GuavaEvent event = new GuavaEvent(); + // 注册 + eventBus.register(event); + eventBus.post("提交事件的内容"); + } + + @Test + void course() { + Course course = new Course("Java设计模式"); + Teacher teacher = new Teacher("fjy8018"); + + course.register(teacher); + + // 业务逻辑 + Question question = new Question("fjy", "问题内容XXX"); + CourseEvent event = new CourseEvent(); + event.setCourse(course); + event.setQuestion(question); + + course.produceQuestion(event); + } +} \ No newline at end of file