当前位置: 首页 > news >正文

设计模式(1)observer

example:

微信订阅号

用户1 注册到 订阅号上,用户2 注册到 订阅号上,

订阅号,发通知给每一个用户。

1. 订阅号需要实现 regiser 功能,把user 添加到 list 里,之后可以通知给你一个用户 update函数,类似回调给用户

package com.example.observe;public interface Subject {void registObserver (MyObserver myObserver);void removeObserver (MyObserver myObserver);void notifyObserver();
}
package com.example.observe;import java.util.ArrayList;
import java.util.List;public class ObjectForSubject implements Subject {private List<MyObserver> arrayList= new ArrayList<MyObserver>();@Overridepublic void registObserver(MyObserver myObserver) {arrayList.add(myObserver);}@Overridepublic void removeObserver(MyObserver myObserver) {arrayList.remove(myObserver);}@Overridepublic void notifyObserver() {arrayList.forEach(item ->item.update("hello all"));}
}

User 需要实现 update 回调:

package com.example.observe;public interface MyObserver {public void update (String msg);
}
package com.example.observe;import android.util.Log;public class ObserverImp implements MyObserver {private static String TAG = MyObserver.class.getSimpleName() + "LIU";private String id;public ObserverImp(String id) {this.id = id;}@Overridepublic void update(String msg) {Log.d(TAG, "Myobserver" + msg + "id =" + this.id);}
}

实现调用代码:

        ObjectForSubject objectForSubject = new ObjectForSubject();ObserverImp observerImp1 = new ObserverImp("1");ObserverImp observerImp2 = new ObserverImp("2");objectForSubject.registObserver(observerImp1);objectForSubject.registObserver(observerImp2);objectForSubject.notifyObserver();

log:

2024-10-01 08:48:29.970 25436-25436/com.example.observe D/MyObserverLIU: Myobserverhello allid =1
2024-10-01 08:48:29.970 25436-25436/com.example.observe D/MyObserverLIU: Myobserverhello allid =2

android example:

类似于 android  broadcast 的处理方式

register myReceiver.

when intent comming,  then notify all recevier.

参考:

设计模式 观察者模式 以微信公众服务为例_微服务 观察者模式 通知所有服务-CSDN博客

GitHub - youlookwhat/DesignPattern: 📚 Java 23种设计模式全归纳


http://www.mrgr.cn/news/40382.html

相关文章:

  • void类型
  • 闭源与开源嵌入模型比较以及提升语义搜索效果的技术探讨
  • 樊登《在云端》【夸克云盘】更新樊登讲书 4k影视 云盘分享
  • 详解TCP协议(三次握手四次挥手)
  • 详解nsenter
  • Python+Requests接口自动化测试框架:测试用例设计
  • 深度学习·wandb
  • LeetCode题练习与总结:二叉树的所有路径--257
  • GEE教程:下载大气环流模型 (GCM)全球数据动态项目 NASA NEX GDDP 产品数据库
  • 2024年使用宝塔面板轻松部署Java Web
  • 关于4G-Cat.1模组Air780E选型,注意事项盘点
  • 【题解】【递推】—— [NOIP2003 普及组] 栈
  • ElasticSearch分词器、相关性详解与聚合查询实战
  • Win10之Ubuntu22.04(主机)与Virtual-BOX(宿主win10)网络互通调试(七十九)
  • Linux: network: /proc/net/sockstat 解读
  • Elasticsearch学习笔记(3)
  • C++14:通过make_index_sequence实现将tuple转换为array
  • Python 并发新境界:探索 `multiprocessing` 模块的无限可能
  • 通信工程学习:什么是DQDB分布式队列双总线
  • 禁止某驱动软件自动联网检测更新