设计模式之观察者模式

一、基本概念

观察者模式定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体对象,当主体对象发生变化的时候,它的所有的依赖者(观察者)都会收到通知并更新,属于行为型模式。

观察者模式有时也叫发布订阅模式。

二、生活实例

消息通知
在这里插入图片描述

三、代码示例

3.1 JDK方式

/**
 * @description:JDK提供的观察者的实现方式
 * @author: annecheng,2019-06-30 20:21
 */
public class Wechat extends Observable{
    private String name = "微信";
    private static Wechat wechat = null;
    private Wechat() {
    }
    public static Wechat getInstance(){
        if(null == wechat){
            wechat = new Wechat();
        }
        return wechat;
    }
    public String getName() {
        return name;
    }
    public void publishMessage(MessageBean messageBean) {
        System.out.println(messageBean.getName() + "发了一条消息:" + messageBean.getMessageInfo());
        setChanged();
        notifyObservers(messageBean);
    }
}

/**
 * @description:接受者
 * @author: annecheng,2019-06-30 20:28
 */
public class Friend implements Observer{
    private String firendName;
    public Friend(String firendName) {
        this.firendName = firendName;
    }
    //观察者 -- 异步通知
    public void update(Observable o, Object arg) {
        Wechat wechat = (Wechat) o;
        MessageBean messageBean = (MessageBean) arg;
        System.out.println("-----------------------");
        System.out.println(firendName + "您好,\n" +
                "您收到一个来自" + wechat.getName() + "的消息,请查看,消息内容如下:\n" +
                messageBean.getMessageInfo() + "\n" +
                "发送者" + messageBean.getName());
    }
}

/**
 * @description:消息体
 * @author: annecheng,2019-06-30 20:26
 */
public class MessageBean {
    private String name;
    private String messageInfo;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMessageInfo() {
        return messageInfo;
    }
    public void setMessageInfo(String messageInfo) {
        this.messageInfo = messageInfo;
    }
}

测试:
在这里插入图片描述

3.2 Guava

/**
 * @description:Guava
 * @author: annecheng,2019-06-30 20:47
 */
public class GuavaEvent {

    @Subscribe
    public void subscribe(String str){
        System.out.println("执行subscribe方法,入参:" + str);
    }

    @Subscribe
    public void subscribe2(Integer num) {
        System.out.println("执行subscribe2方法,入参:" + num);
    }
}

在这里插入图片描述

四、总结

优点:
1、观察者和被观察者之间建立了一个抽象的耦合。
2、支持广播通信

缺点:
1、观察者之间有过多的细节依赖,提高时间消耗及程序的复杂度。
2、使用要得当,要避免循环调用。

mq – 观察者模式的具体应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值