设计模式之观察者模式

文章目录

      • 一.概念
      • 二.优缺点
      • 三.例子(以jdk给出的为例)

一.概念

观察者模式定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象,当主体对象发生变化时,它的所有观察者,都会
接收到通知并更新,属于行为型模式.观察者模式又叫发布订阅模式
以JDK的Observer Observable为例
Spring中的ContextLoaderListener使用的观察者

二.优缺点

优点:
1)在观察者与被观察者之间建立一个抽象的集合
2)观察者模式支持广播通信
缺点:
1)观察者之间过多的细节依赖,时间消耗多,程序的复杂性更高
2)使用不当会出现循环调用

三.例子(以jdk给出的为例)

Asker可以提出Question,由响应的Reciever去解决

public class Question {
    private String content;
    private String userName;
.....省略
}

public class Asker extends Observable {
    public void askQuestion(Question question) {
        System.out.println("Asker"+question.getUserName()+ ",提问:"+question.getContent());
        setChanged();
        notifyObservers(question);
    }
}

public class Reciever implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        Asker asker = (Asker)o;
        Question question = (Question)arg;
        System.out.println("Reciver 接收到"+question.getUserName()+",问题:"+question.getContent());
    }
}

public class MainTest {
    public static void main(String[] args) {
        Asker asker = new Asker();
        Reciever reciever1 = new Reciever();
        Reciever reciever2 = new Reciever();
        asker.addObserver(reciever1);
        asker.addObserver(reciever2);
        Question question = new Question();
        question.setContent("谁是世界上最帅的男人?");
        question.setUserName("自认为最帅的男人");
        asker.askQuestion(question);
    }
}

在这里插入图片描述

你可能感兴趣的:(设计模式)