标签:spring rem name this ica receive ESS system src
观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。
该模式包含四个角色:
下面用一个微信公众号发布文章的列子来简单讲解下观察者模式。通过这个列子,能帮助我们加深对观察者模式的理解。
step1:定义Subject和Observer接口
//定义一个微信公众号接口,相当于类图中的Subject角色
public interface WeChatOfficialAccount {
public void registerObserver(WeChatObserver observer);
public void removeObserver(WeChatObserver observer);
public void notifyObserver(String message);
}
//定义一个微信用户接口,相当于类图中的Observer角色
public interface WeChatObserver {
void pullArticle(String message);
}
step2:编写实现类
//这步没什么好说的
public class MyWeChatOfficialAccount implements WeChatOfficialAccount {
private List<WeChatObserver> observerList;
public MyWeChatOfficialAccount(){
this.observerList = new ArrayList<>();
}
@Override
public void registerObserver(WeChatObserver observer) {
this.observerList.add(observer);
}
@Override
public void removeObserver(WeChatObserver observer) {
this.observerList.remove(observer);
}
@Override
public void notifyObserver(String message) {
observerList.forEach(item->item.pullArticle(message));
}
}
public class WeChatUser implements WeChatObserver {
private String userName;
public WeChatUser(String userName){
this.userName = userName;
}
@Override
public void pullArticle(String message) {
System.out.println(userName+" receive message:"+message);
}
}
step3:编写客户端类
public class Main {
public static void main(String[] args) {
WeChatUser user1 = new WeChatUser("csx-java");
WeChatUser user2 = new WeChatUser("zr-php");
WeChatOfficialAccount officialAccount = new MyWeChatOfficialAccount();
//csx和zr两个用户都订阅了这个公众号
officialAccount.registerObserver(user1);
officialAccount.registerObserver(user2);
//公众号发布文章,订阅者都会受到文章通知
officialAccount.notifyObserver("Java is good...");
//zr取消订阅
officialAccount.removeObserver(user2);
//再次发布文章
officialAccount.notifyObserver("Java is more popular than php");
}
}
优点
缺点
这两种模式比较相似。其实我个人觉得没有太大的必须去纠结两者的区别。如果非要说下两者的区别的话,大概有:
标签:spring rem name this ica receive ESS system src
原文地址:https://www.cnblogs.com/54chensongxia/p/12516569.html