观察者模式:当对象间存在一对多关系时,则使用观察者模式(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));
}
}
打印结果:
李四收到了:今天也是元气满满的一天
张三收到了:今天也是元气满满的一天
正如开文所言,就是一对多的关系,当一方发生了与多方关联的变更.多方就会收到通知.在实际开发中一般都是使用消息队列进行开发.
本文介绍了一种常用的设计模式——观察者模式,详细解释了其应用场景和实现原理,并通过一个具体的微博粉丝关注系统的示例,展示了如何在实际开发中运用观察者模式解决一对多关系的通知问题。
1786

被折叠的 条评论
为什么被折叠?



