📅  最后修改于: 2023-12-03 15:41:45.202000             🧑  作者: Mango
观察者模式是一种行为型设计模式。在该模式中,一个对象(称为主题)维护一组依赖于它的对象(称为观察者),当主题状态发生改变时,所有的观察者都得到通知并且自动更新。
观察者模式也被称为发布-订阅模式、模型-视图模式、源-监听器模式或者从属者模式。
观察者模式包含以下角色:
// Subject.java
public interface Subject{
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
// ConcreteSubject.java
public class ConcreteSubject implements Subject{
private List<Observer> observers;
private int state;
public ConcreteSubject(){
observers = new ArrayList<>();
}
public void registerObserver(Observer o){
observers.add(o);
}
public void removeObserver(Observer o){
int index = observers.indexOf(o);
if(index >= 0){
observers.remove(index);
}
}
public void notifyObservers(){
for(Observer observer : observers){
observer.update(state);
}
}
public void setState(int state){
this.state = state;
notifyObservers();
}
}
// Observer.java
public interface Observer{
public void update(int state);
}
// ConcreteObserver1.java
public class ConcreteObserver1 implements Observer{
public void update(int state){
// 根据具体业务逻辑更新自身状态
}
}
// ConcreteObserver2.java
public class ConcreteObserver2 implements Observer{
public void update(int state){
// 根据具体业务逻辑更新自身状态
}
}
观察者模式可以应用于各种场景,例如事件处理、用户界面组件、消息传递等等。
public static void main(String[] args){
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver1 observer1 = new ConcreteObserver1();
ConcreteObserver2 observer2 = new ConcreteObserver2();
subject.registerObserver(observer1);
subject.registerObserver(observer2);
subject.setState(1);
subject.removeObserver(observer2);
subject.setState(2);
}
观察者模式是一种灵活且有效的设计模式,可以满足很多应用场景的需求。在使用观察者模式时,需要注意各个角色的职责和关系,以确保程序的健壮性和性能。