设计模式之观察者模式(observable)

观察者模式

案例

论坛提问

提问者

public class Questioner extends Observable {

    private static Questioner questioner;

    private Questioner(){}

    public static Questioner getInstance(){
        if(null == questioner){
            questioner = new Questioner();
        }
        return questioner;
    }

    public void releaseQuestion(Question question){
        System.out.println("发布问题");
        setChanged();
        notifyObservers(question);
    }
}

问题实体类

public class Question {

    private String username;

    private String content;
    
    // get/set
}

回答者

public class Responder implements Observer {

    private String name;

    public Responder(String name) {
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {

        Questioner questioner = (Questioner) o;

        Question question = (Question) arg;

        System.out.println("接收"+question.getUsername()+"的提问:\n");
        System.out.println("问题:"+question.getContent());

    }
}

Main

public class Main {

    public static void main(String[] args) {
        // 创建提问者
        Questioner questioner = Questioner.getInstance();
        // 创建回答者
        Responder responder = new Responder("glo6f");
        // 创建问题
        Question question = new Question();
        question.setUsername("luck");
        question.setContent("设计模式都有哪些");
        // 相当于@glo6f,订阅回答者
        questioner.addObserver(responder);
        // 发布问题
        questioner.releaseQuestion(question);
    }
}

应用

spring监听模块


设计模式之观察者模式(observable)
https://www.blaaair.com/archives/she-ji-mo-shi-zhi-guan-cha-zhe-mo-shi-observable
作者
Glo6f
发布于
2022年06月07日
许可协议