1. ホーム

[解決済み】ObserverとObservableはいつ使うべき?

2022-04-10 15:39:28

質問

面接官から聞かれました。

とは何ですか? ObserverObservable また、どのような場合に使用するのでしょうか?

私はこの言葉を知らなかったので、家に戻ってから、グーグルで ObserverObservable ということで、いろいろな資料から、いくつかのポイントをピックアップしてみました。

<ブロッククオート

1) Observable はクラスであり Observer はインターフェースです。

2) Observable クラスは Observer s.

3) Observable オブジェクトが更新されると update() メソッドで、その Observer が変更されたことを通知する。

こんな例がありました。

import java.util.Observable;
import java.util.Observer;

class MessageBoard extends Observable
{
    public void changeMessage(String message) 
    {
        setChanged();
        notifyObservers(message);
    }
}

class Student implements Observer 
{
    @Override
    public void update(Observable o, Object arg) 
    {
        System.out.println("Message board changed: " + arg);
    }
}

public class MessageBoardTest 
{
    public static void main(String[] args) 
    {
        MessageBoard board = new MessageBoard();
        Student bob = new Student();
        Student joe = new Student();
        board.addObserver(bob);
        board.addObserver(joe);
        board.changeMessage("More Homework!");
    }
}

しかし、なぜ ObserverObservable ? は何ですか? setChanged()notifyObservers(message) のメソッドですか?

どのように解決するのですか?

具体的な例として、生徒とMessageBoardがあるとします。 生徒は、MessageBoard に新しいメッセージが投稿されたときに通知を受けたい Observers のリストに自分自身を追加することで登録します。 MessageBoard に Message が追加されると、Observers のリストを繰り返し、イベントが発生したことを通知します。

Twitterを思い浮かべてください。 あなたが誰かをフォローしたいと言うと、Twitterはあなたをその人のフォロワーリストに追加します。 相手が新しいつぶやきを送ると、それが入力に表示される。 この場合、あなたのTwitterアカウントはObserverで、あなたがフォローしている人はObservableです。

Twitterの方がメディエーターになる可能性が高いので、この例えは完璧ではないかもしれません。 しかし、これは要点を示しています。