目录

一、简单介绍

二、观察者模式涉及的4个角色

三、观察者模式demo:简单的“微信公众号推送消息给相关用户”


一、简单介绍

定义对象间“一对多”的依赖关系。

“一”为被观察者,“多”为观察者;当被观察者(某个微信公众号)状态变化时,观察者(订阅此公众号多诸多用户)得到通知而被自动更新。

二、观察者模式涉及的4个角色

1、抽象主题Subject

即被观察者,把所有观察者引用保存到集合,并提供接口对观察者进行增、删、通知。

2、具体主题ConcreteSubject

抽象主题Subject的实现。

3、抽象观察者Observer

提供更新接口,收到被观察者通知时 更新自己。

4、具体观察者ConcreteObserver

抽象观察者Observer的实现

三、观察者模式demo:简单的“微信公众号推送消息给相关用户”

0、简介

  • 1、定义三个用户
  • 2、三个用户订阅公众号
  • 3、公众号消息推送给3个订阅用户
  • 4、其中一个用户取消订阅
/*** 测试微信公众号向订阅它多用户发消息* */
public class ZTest {public static void main(String[] args) {//1、定义三个用户User user1 = new User("双子座撒卡");User user2 = new User("水瓶座卡妙");User user3 = new User("摩羯座修罗");//2、三个用户订阅公众号WeChat weChat = new WeChat();weChat.addObserver(user1);weChat.addObserver(user2);weChat.addObserver(user3);//3、公众号消息推送给3个订阅用户weChat.notifyObserver("快速前往圣所山域!!!");System.out.println("---------------------------------");//4、其中一个用户取消订阅weChat.delOnserver(user3);weChat.notifyObserver("摩羯座修罗-取消订阅!!!");}
}

结果:

1、实现方式

1.1 定义观察者和被观察者2个接口类

/*** 被观察者(一)* 维护一个集合:保存观察者引用* 提供增、删、通知接口*/
public interface Subject {void addObserver(Observer observer);void delOnserver(Observer observer);void notifyObserver(String notifyInfo);}
/*** 观察者(多)*/
public interface Observer {public void update(String str);}

1.2 定义公众号实现类并重写被观察者方法

public class WeChat implements Subject{private static List<Observer> observerList;public WeChat(){observerList = new ArrayList<>();}@Overridepublic void addObserver(Observer observer) {observerList.add(observer);}@Overridepublic void delOnserver(Observer observer) {if(observerList.indexOf(observer) != -1){observerList.remove(observerList.indexOf(observer));}}@Overridepublic void notifyObserver(String notifyInfo) {observerList.forEach(s->s.update(notifyInfo));}
}

1.3 定义用户实现类并重写观察者方法

@Slf4j
public class User implements Observer {private String name;public User(String name) {this.name = name;}@Overridepublic void update(String str) {log.info("名字:{},收到微信公众号消息:{}", name, str);}
}

【设计模式】之观察者模式——简单的“微信公众号推送消息给相关用户”相关推荐

  1. 微信公众号推送消息前期准备

    微信公众号推送消息使用手册 1.准备 ​ 微信公众平台注册公众号.(https://mp.weixin.qq.com/) ​ 公众号进行"微信认证" ​ 开通"订阅通知& ...

  2. Java微信公众号推送消息

    Java微信公众号推送消息 1.导入pom文件 2.编写yml文件 3.配置文件 4.配置bean 5.service 模板消息主要代码 6.外放接口测试 ==注:== 1.控制台报40164,解决方 ...

  3. laravel框架中微信公众号推送消息

    首先呢,大家都知道微信公众号是我们现在微信的一个重要功能,那么下面到带大家分享一下微信公众号的基本消息推送,如图首先访问 https://mp.weixin.qq.com/debug/cgi-bin/ ...

  4. C++下使用libcurl实现微信公众号推送消息到粉丝账号

    最近,需要将公司的产品报警信息推送到用户的微信上,之前有过FaceBook和Twitter API使用经验,但真正应用到产品还没有过,今天跑通了原理,记录一下: 入门原理:http://www.360 ...

  5. 微信公众号推送消息给用户?

    1.公众号群发 不管是订阅号服务号,还是服务器,每天都有数量限制,重要活动优惠无法及时推送,存在限制   2. 48小时信息推送 与微信公众号在48小时内互动的用户都可以接收到信息,不限次数推送,及时 ...

  6. 猿创征文|【简单】微信公众号推送教程 ·可直接下载运行 ·超详细

  7. python微信公众号推送_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  8. python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  9. 微信公众号推送课表及天气(事无巨细+JavaScript版+python版)

    微信公众号推送课表及天气 22.10.16更新 我已经做出来更优秀的直接在聊天列表中推送的了! 请移步 企业微信推送 超强版! 基础 简介 作者:申也 个人网站:申也个人网站(www.dongshen ...

最新文章

  1. 使用Postgrest快速创建数据库的OpenAPI接口
  2. 资源利用率监控与存储卷(pv/pvc)
  3. 【快乐水题】495. 提莫攻击
  4. android 仿真翻页动画,Android 两Activity之间动画效果(1)---------翻页效果
  5. MFC中的动态创建与运行时识别
  6. STM32工作笔记0072---UCOSIII在STM32F103上的移植
  7. 2022-04-11 查询PostGIS和pgRouting的版本号
  8. Python 全栈开发二 python基础 字符串 字典 集合
  9. java参考文献大全
  10. 8279c语言编程,可编程键盘/显示接口芯片8279应用浅析
  11. linux dstat io,linux dstat工具
  12. 身份证号归属地 在线查询服务 api
  13. dx11 Shaders for maya
  14. 腾讯云服务器安全加固主机安全基础版和DDoS基础防护内容
  15. 如何在PB数据窗口中设置数据窗口的更新属性
  16. VB写的软件加壳都没用,超强反调试反破解分析,检测OD调试器
  17. 大数高精度加减、乘除、开根(C++版全套最详细、最易懂)
  18. 【边做项目边学Android】手机安全卫士10-设置向导之绑定SIM卡
  19. [组合] UOJ#308. 【UNR #2】UOJ拯救计划
  20. extjs的简单使用

热门文章

  1. Derby数据库简单介绍和使用方法
  2. Python - 批量转换Word文件为PDF文件
  3. [Mac 基础知识]:用Time Machine 恢复mac系统
  4. NILM非侵入式负荷识别(papers with code、data)带代码的论文整理——(论文及实现代码篇) 全网最全
  5. java代码的执行机制+JVM+GC
  6. APP的案例分析-美团外卖
  7. 电子元器件销售如何从小白到精英
  8. VS中 本地Windows调试器 与 生成解决方案
  9. NYOJ 光棍节的快乐【全错排问题】
  10. 10分钟内拥有一个网站后台管理系统