Javaのリスナーパターンを実装の方法
ジャバでオブザーバーパターンを実装するには、オブザーバー(Observer)とサブジェクト(Subject)という 2 つの役割を定義する必要があります。オブザーバーはサブジェクトに登録できます。サブジェクトの状態が変化すると、オブザーバーは通知を受け取り、それに応じて処理を行います。
次に、オブザーバーパターンの実装方法を示す簡単なコード例を示します。
import java.util.ArrayList;
import java.util.List;
// 观察者接口
interface Observer {
void update(String message);
}
// 被观察者接口
interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
// 具体的观察者类
class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received message: " + message);
}
}
// 具体的被观察者类
class ConcreteSubject implements Subject {
private List<Observer> observers = new ArrayList<>();
private String message;
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(message);
}
}
public void setMessage(String message) {
this.message = message;
notifyObservers();
}
}
public class Main {
public static void main(String[] args) {
ConcreteObserver observer1 = new ConcreteObserver("Observer 1");
ConcreteObserver observer2 = new ConcreteObserver("Observer 2");
ConcreteSubject subject = new ConcreteSubject();
subject.registerObserver(observer1);
subject.registerObserver(observer2);
subject.setMessage("Hello World!");
}
}
上記のコードでは、ConcreteObserverはObserverインターフェースを実装し、被観察者からのメッセージを受信するためのupdateメソッドを実装しています。ConcreteSubjectはSubjectインターフェースを実装し、観察者の登録、削除、通知を行うメソッドを実装しています。被観察者の状態が変化した場合は、notifyObserversメソッドを呼び出してすべての観察者に通知します。
Mainクラスに、Observer1とObserver2、そしてSubjectを作成します。ObserverをSubjectに登録したのち、setMessageメソッドを呼び出してSubjectの状態を変更すると、Observerがそれに応じて通知を受け取り、メッセージを出力します。
以上のコードは、オブザーバーパターンの簡単な実装例です。必要に応じて、修正や拡張が可能です。