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がそれに応じて通知を受け取り、メッセージを出力します。

以上のコードは、オブザーバーパターンの簡単な実装例です。必要に応じて、修正や拡張が可能です。

bannerAds