package com.xxxx.seckill.test;
import java.util.ArrayList;
import java.util.List;
/**
* @author WangHeng
* @version V1.0
* @date 2023/1/11- 16:46
* @desc 观察者模式
**/
public class Subject {
//存储每个观察者
private List<Observer> list = new ArrayList<>();
//模拟观察的状态
private int state;
//修改状态
public void setState(int state) {
this.state = state;
notifyAllObservers();
}
//获取当前对象的状态
public int getState() {
return this.state;
}
//通知所有的观察者
public void notifyAllObservers() {
list.forEach(e -> e.update());
}
//将观察者放入集合list当中
public void add(Observer observer) {
list.add(observer);
}
}
package com.xxxx.seckill.test;
/**
* @author WangHeng
* @version V1.0
* @date 2023/1/11- 16:46
* @desc 观察者抽象类
**/
public abstract class Observer {
//定义成员变量 归属于Subject主题 所以注入此成员变量
protected Subject subject;
//抽象方法观察消息
public abstract void update();
}
package com.xxxx.seckill.test;
/**
* @author WangHeng
* @version V1.0
* @date 2023/1/11- 16:52
* @desc 观察者第一个人
**/
public class OneObserver extends Observer {
//构造方法注入
public OneObserver(Subject subject) {
this.subject = subject;
subject.add(this);
}
//重写收到消息的方法
@Override
public void update() {
System.out.println("OneObserver接收到消息了" + subject.getState());
}
}
package com.xxxx.seckill.test;
/**
* @author WangHeng
* @version V1.0
* @date 2023/1/11- 16:52
* @desc 观察者第二个人
**/
public class TwoObserver extends Observer {
//构造方法注入
public TwoObserver(Subject subject) {
this.subject = subject;
subject.add(this);
}
//重写收到消息的方法
@Override
public void update() {
System.out.println("TwoObserver接收到消息了" + subject.getState());
}
}
package com.xxxx.seckill.test;
/**
* @author WangHeng
* @version V1.0
* @date 2023/1/11- 16:59
* @desc 测试类
**/
public class Main {
public static void main(String[] args) {
//new 一个主题
Subject subject = new Subject();
//归入同一个主题
new OneObserver(subject);
new TwoObserver(subject);
//修改状态为15
subject.setState(15);
//修改状态为10
subject.setState(10);
}
}
控制台输入