Observerとは監視者という意味で、何らかのイベントを監視して実行させるパターンです。
package com.example.observer;
public interface Observer {
public void update(Event event);
}
package com.example.observer;
public class ConcreteObserver implements Observer {
@Override
public void update(Event event) {
}
}
package com.example.observer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public abstract class Event {
private List<Observer> observerList = new ArrayList<>();
public void addObserver(Observer observer) {
observerList.add(observer);
}
public void deleteObserver(Observer observer) {
observerList.remove(observer);
}
public void notifyObserver() {
Iterator it = observerList.iterator();
while(it.hasNext()) {
Observer observer = (Observer)it.next();
observer.update(this);
}
}
public abstract void execute();
}
package com.example.observer;
public class ConcreteEvent extends Event {
@Override
public void execute() {
notifyObserver();
}
}
package com.example.observer;
public class Main {
public static void main(String[] args) {
Observer observer1 = new ConcreteObserver();
Observer observer2 = new ConcreteObserver();
Event event = new ConcreteEvent();
event.addObserver(observer1);
event.addObserver(observer2);
event.execute();
}
}
Observerを実装したクラスをインスタンス化してEventに追加し、後ほどEventのexecute()を実行することでupdate()の処理が実行されます。
まぁ、Observerはexecute()の処理実行を監視しているイメージです。