package com.observer;
import java.util.ArrayList;
import java.util.List;
/**
* @author yangmin
* @version 1.0
* @description: 观察者模式中被观察的对象
* @date 2022/4/21 11:50
*/
public class Subject {
/**
* 观察者监听的对象
*/
private int stat;
/**
* 观察该对象的观察者结合
*/
private List<Oberver> oberverList= new ArrayList<Oberver>();;
/**
* 当该对象的状态改变的时候,唤醒所有的观察者去执行响应的任务
* @param stat
*/
public void setStat(int stat) {
this.stat = stat;
notifyAllObservers();
}
public int getStat() {
return stat;
}
/**
* 添加被观察者
* @param oberver
*/
public void add(Oberver oberver) {
oberverList.add(oberver);
}
/**
* 唤醒所有的观察者
*/
public void notifyAllObservers() {
oberverList.forEach(oberver -> oberver.handel());
}
}
观察者的父类
package com.observer;
/**
* @author yangmin
* @version 1.0
* @description: 观察者的父类
* @date 2022/4/21 11:56
*/
public abstract class Oberver {
/**
* 要观察的主体对象
*/
protected Subject subject;
/**
* 当主体的对象发生变化的时候观察者要执行的处理方法
*/
public abstract void handel();
}
三个观察者子类
子类一
package com.observer;
/**
* @author yangmin
* @version 1.0
* @description: TODO
* @date 2022/4/21 12:02
*/
public class ObserverSon1 extends Oberver {
/**
* 创建对象的时候,把自己添加到被观察的对象中
*/
public ObserverSon1(Subject subject) {
this.subject = subject;
this.subject.add(this);
}
@Override
public void handel() {
System.out.println("son1");
}
}
子类二
package com.observer;
/**
* @author yangmin
* @version 1.0
* @description: TODO
* @date 2022/4/21 12:02
*/
public class ObserverSon2 extends Oberver {
/**
* 创建对象的时候,把自己添加到被观察的对象中
*/
public ObserverSon2(Subject subject) {
this.subject = subject;
this.subject.add(this);
}
@Override
public void handel() {
System.out.println("son2");
}
}
子类三
package com.observer;
/**
* @author yangmin
* @version 1.0
* @description: TODO
* @date 2022/4/21 12:02
*/
public class ObserverSon3 extends Oberver {
/**
* 创建对象的时候,把自己添加到被观察的对象中
*/
public ObserverSon3(Subject subject) {
this.subject = subject;
this.subject.add(this);
}
@Override
public void handel() {
System.out.println("son3");
}
}
测试
package com.observer;
/**
* @author yangmin
* @version 1.0
* @description: TODO
* @date 2022/4/21 12:05
*/
public class Main {
public static void main(String[] args) {
Subject subject = new Subject();
new ObserverSon1(subject);
new ObserverSon2(subject);
new ObserverSon3(subject);
subject.setStat(1);
}
}
输出结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)