設計模式【五】觀察者模式

1. 代碼示例

import java.util.ArrayList;
import java.util.List;

/**
 * @authod: pp_lan on 2020/3/25.
 * 使用場景:進行廣播通知。如:拍賣出價,通知其他人進行出價
 */
public class ObserveDemo {

    static class Subject {
        private List<Observer> observers = new ArrayList<>();

        private int state;

        public int getState() {
            return state;
        }

        public void setState(int state) {
            this.state = state;
            notifyAllObservers();
        }

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

        public void notifyAllObservers() {
            for (Observer observer : this.observers) {
                observer.update();
            }
        }
    }


    static abstract class Observer {
        public Observer(Subject subject) {
            this.subject = subject;
            this.subject.attach(this);
        }

        protected Subject subject;

        public abstract void update();
    }

    static class BinaryObserver extends Observer {

        public BinaryObserver(Subject subject) {
            super(subject);
        }

        @Override
        public void update() {
            System.out.println("binary update: state " + this.subject.getState());
        }
    }

    static class HexObserver extends Observer {

        public HexObserver(Subject subject) {
            super(subject);
        }

        @Override
        public void update() {
            System.out.println("Hex update: state " + this.subject.getState());
        }
    }

    public static void main(String[] args) {
        Subject subject = new Subject();

        new HexObserver(subject);
        new BinaryObserver(subject);

        subject.setState(15);

    }
}

2. 運行結果

Hex update: state 15
binary update: state 15

3. 總結

在需要做類似廣播通知的時候可以使用該模式,通過觸發條件進行廣播通知。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章