【デザインパターン】Observerパターン

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()の処理実行を監視しているイメージです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください