观察者模式 - 969251639/study GitHub Wiki

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

项目场景:在处理玩主流程逻辑后,需要做一些额外的操作,那么这些操作完全可以通过事件方式发送出去,实现与主流程的解耦

  1. 定义观察者
public interface Listener {
	public void notify(...) throws Exception;
}

public class AObserver implements Listener {
        @Override
        public void notify(...) throws Exception {
            ...
        }
}

public class BObserver implements Listener {
        @Override
        public void notify(...) throws Exception {
            ...
        }
}
  1. 定义主题和监听该主题的观察者
public class Subject {
    private List<Listener> listeners = new ArrayList<>();
    public Subject() {
        AObserver aObserver = new AObserver();
        BObserver bObserver = new BObserver();
        listeners.add(aObserver);
        listeners.add(bObserver);
    } 
    public void publish(...) {
        //doSomething
        notify(...);
    }
    private void notify(...) {
        for(Listener listener : listeners) {
            listener.notify(...);
        }
    }
}
  1. 使用
Subject subject = new Subject();
subject.publish(...);
⚠️ **GitHub.com Fallback** ⚠️