Observerモード

12591 ワード

傍観者とは,観察者がユーザに何らかの行為があれば登録を実行する傍観者である.
private static void observer() {
    RandomGenerator randomGenerator = new RandomGenerator();

    Observer observer1 = new DigitObserver();
    Observer observer2 = new GraphicObserver();
    Observer observer3 = number -> {
        for (int i = 0; i < number; i++) {
            System.out.print("=");
        }
        System.out.println();
    };

    randomGenerator.addObserver(observer1);
    randomGenerator.addObserver(observer2);
    randomGenerator.addObserver(observer3);

    randomGenerator.execute();
}
// 출력
숫자 : 21
*********************
=====================
ファインダーオブジェクトrandomGeneratorにDigitファインダー、グラフィックファインダー、メインでRamaで宣言されたファインダーを加え、メソッドを実行する様子.
Observerインタフェース
public interface Observer {
    void update(int number);
}
ObserverのRandom Generatorクラスの管理
public class RandomGenerator {
    private List<Observer> observers = new ArrayList<>();

    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    // 리스트에 담겨있는 옵저버들 각각에 랜덤으로 생성된 수를 넘겨주고 해당
	// 옵저버의 update메서드를 실행시킨다
    public void execute() {
        int num = new Random().nextInt(45);
        observers.forEach(ob -> ob.update(num));
    }
}
DigitObserverオブジェクト
public class DigitObserver implements Observer{
    @Override
    public void update(int number) {
        System.out.println("숫자 : " + number);
    }
}
グラフィックObserverオブジェクト
public class GraphicObserver implements Observer{
    @Override
    public void update(int number) {
        for (int i = 0; i < number; i++) {
            System.out.print("*");
        }
        System.out.println();
    }
}
インタフェースを使用して、オブジェクトにupdateメソッドがあることを確認します.したがって,観察オブジェクトがこれらの特徴を知るだけで自分の状態を通知できる場合,そのオブジェクトのupdateメソッドを呼び出すだけでよい.
さまざまな形式のオプティカル(光学式)ドライブを作成し、必要な機能に複数のオプティカル(光学式)ドライブを挿入し、イベントが発生したときにオプティカル(光学式)ドライブを含むオブジェクトを実行できます.
インタフェースと抽象クラスが使用されているため、観察者は(すなわち、光ファイバがどのようなオブジェクトであるか)を知る必要がなく、RandomGeneratorクラスは光ファイバに関連する依存性を生じない.所与の傍観者を受信して実行する方法のみが存在する.
変更が必要な場合は、抽象クラスを変更するだけです.