Java设计模式之观察者模式

本文介绍了一种常用的设计模式——观察者模式,详细解释了其应用场景和实现原理,并通过一个具体的微博粉丝关注系统的示例,展示了如何在实际开发中运用观察者模式解决一对多关系的通知问题。

观察者模式:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

以上是观察者模式的应用场景.在实际开发中,使用观察者模式进行实践的场景很多,诸如各类消息队列中间件的发布者和订阅者模式.
在实际的场景中,如微信公众号,微博等等,都与观察者模式的场景基本一致.
以下是通过我对观察者模式的浅薄理解写的demo.

package org.freebird.designPatern;

import java.util.*;

/**
 * 设计模式之观察者模式
 */
public class ObserverDemo {
    public static void main(String[] args) {
        Observer observer1 = new Observer("张三");
        Observer observer2 = new Observer("李四");
        ObserverServer server = new ObserverServer();
        server.following(observer1);
        server.following(observer2);
        server.pushWeibo("今天也是元气满满的一天");
    }
}

/**
 * 微博粉丝
 */
class Observer {
    private String name;

    public Observer() {
    }

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

    /**
     * 收到微博的推送
     *
     * @param message
     */
    public void receiveWeibo(String message) {
        System.out.println(this.name + "收到了:" + message);
    }
}

/**
 * 微博大V
 */
class ObserverServer {
    /**
     * 粉丝集合
     */
    private Set<Observer> observers;

    public ObserverServer() {
        this.observers = new HashSet<>();
    }

    /**
     *  添加关注
     *
     * @param observer
     */
    public void following(Observer observer) {
        observers.add(observer);
    }

    /**
     * 取消关注
     */
    public void unfollowed(Observer observer) {
        if (!observers.isEmpty()) {
            observers.remove(observer);
        }
    }

    /**
     * 发微博
     */
    public void pushWeibo(String message) {
        observers.forEach(observer -> observer.receiveWeibo(message));
    }
}



打印结果:

李四收到了:今天也是元气满满的一天
张三收到了:今天也是元气满满的一天

正如开文所言,就是一对多的关系,当一方发生了与多方关联的变更.多方就会收到通知.在实际开发中一般都是使用消息队列进行开发.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值