Guava实现消息通知

This commit is contained in:
2020-03-06 16:41:18 +08:00
parent 7f6d42c06d
commit 4a97bb9e2a
6 changed files with 131 additions and 24 deletions

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
/**
* 老师实体
* <p>
* 老师观察课程是否产生了新的问题
*
* @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());
}
}

View File

@@ -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("提交事件的内容");
}
}

View File

@@ -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);
}
}