观察者
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.observer;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.EventListener;
|
||||
import java.util.Observable;
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
* 课程
|
||||
* 被观察者类
|
||||
* <p>
|
||||
* {@link Observable} 使用 {@link Vector} 保证线程安全
|
||||
* <p>
|
||||
* JDK源码
|
||||
* {@link java.awt.Event} 事件监听器
|
||||
* {@link javax.servlet.ServletRequestListener} HTTP请求事件监听器
|
||||
* 继承 {@link EventListener},有大量实现,例如{@link org.springframework.beans.factory.parsing.ReaderEventListener}
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/3/5 15:23
|
||||
*/
|
||||
@Slf4j
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public class Course extends Observable {
|
||||
|
||||
private String courseName;
|
||||
|
||||
/**
|
||||
* 产生问题
|
||||
*
|
||||
* @param course
|
||||
* @param question
|
||||
*/
|
||||
public void produceQuestion(Course course, Question question) {
|
||||
log.info("{}在{}提交了一个问题", question.getUsername(), course.getCourseName());
|
||||
// 状态变化
|
||||
setChanged();
|
||||
// 通知观察者
|
||||
notifyObservers(question);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.observer;
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.observer;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
|
||||
/**
|
||||
* 老师实体
|
||||
* <p>
|
||||
* 老师观察课程是否产生了新的问题
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2020/3/5 15:24
|
||||
*/
|
||||
@Slf4j
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public class Teacher implements Observer {
|
||||
|
||||
private String teacherName;
|
||||
|
||||
/**
|
||||
* This method is called whenever the observed object is changed. An
|
||||
* application calls an <tt>Observable</tt> object's
|
||||
* <code>notifyObservers</code> method to have all the object's
|
||||
* observers notified of the change.
|
||||
*
|
||||
* @param o the observable object.
|
||||
* @param arg an argument passed to the <code>notifyObservers</code>
|
||||
*/
|
||||
@Override
|
||||
public void update(Observable o, Object arg) {
|
||||
Course course = (Course) o;
|
||||
Question question = (Question) arg;
|
||||
log.info("{}老师的{}课程接收到一个{}提交的问题,内容为:{}",
|
||||
teacherName, course.getCourseName(), question.getUsername(), question.getContent());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.observer;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* @author F嘉阳
|
||||
* @date 2020/3/5 15:36
|
||||
*/
|
||||
@Slf4j
|
||||
class TeacherTest {
|
||||
|
||||
@Test
|
||||
void update() {
|
||||
Course course = new Course("Java设计模式");
|
||||
Teacher teacher = new Teacher("fjy8018");
|
||||
|
||||
course.addObserver(teacher);
|
||||
|
||||
// 业务逻辑
|
||||
Question question = new Question("fjy", "问题内容XXX");
|
||||
|
||||
course.produceQuestion(course, question);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user