观察者模式的个人简单理解:假如有A类与B类,如果A类发生了变化,则B类也要做出相应的变化,可以在A类中注册B类,在A类做一些业务逻辑后,调用一些方法通知B类。
被观察者的抽象类
/**
* author:lcy
* since 2021/6/29 17:00
* 被观察者的抽象类,被观察者可以添加观察者,可以通知观察者
*/
public abstract class Subject {
//观察者的列表
private ArrayList<Observer> observers=new ArrayList<Observer>();
//添加一个观察者
public void add(Observer observer){
observers.add(observer);
}
//去除一个观察者
public void remove(Observer observer){
observers.remove(observer);
}
//通知所有观察者
public void nodifyObservers(String state){
for (Observer observer : observers) {
//通知观察者,state是状态
observer.update(state);
}
}
}
被观察者的具体实现
/**
* author:lcy
* since 2021/6/29 17:00
* 被观察者的具体实现
*/
public class ConcreteSubject extends Subject{
//被观察者处理完业务逻辑后通知观察者的通知方法
public void notifys(String state){
//通知所有的观察者
this.nodifyObservers(state);
}
}
观察者可以使用的接口
/**
* author:lcy
* since 2021/6/29 16:50
* 观察者的观察接口
*/
public interface Observer {
//通知接口
void update(String state);
}
观察者实际收到通知的具体实现
/**
* author:lcy
* since 2021/6/29 16:57
* 观察者实际收到通知的方法
*/
public class ConcreteObserver implements Observer {
@Override
public void update(String state) {
//观察者表示收到通知
System.out.println("状态更新为:"+state);
//做一些业务
}
}