【设计模式】之观察者模式——简单的“微信公众号推送消息给相关用户”
目录
一、简单介绍
二、观察者模式涉及的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.准备 微信公众平台注册公众号.(https://mp.weixin.qq.com/) 公众号进行"微信认证" 开通"订阅通知& ...
- Java微信公众号推送消息
Java微信公众号推送消息 1.导入pom文件 2.编写yml文件 3.配置文件 4.配置bean 5.service 模板消息主要代码 6.外放接口测试 ==注:== 1.控制台报40164,解决方 ...
- laravel框架中微信公众号推送消息
首先呢,大家都知道微信公众号是我们现在微信的一个重要功能,那么下面到带大家分享一下微信公众号的基本消息推送,如图首先访问 https://mp.weixin.qq.com/debug/cgi-bin/ ...
- C++下使用libcurl实现微信公众号推送消息到粉丝账号
最近,需要将公司的产品报警信息推送到用户的微信上,之前有过FaceBook和Twitter API使用经验,但真正应用到产品还没有过,今天跑通了原理,记录一下: 入门原理:http://www.360 ...
- 微信公众号推送消息给用户?
1.公众号群发 不管是订阅号服务号,还是服务器,每天都有数量限制,重要活动优惠无法及时推送,存在限制 2. 48小时信息推送 与微信公众号在48小时内互动的用户都可以接收到信息,不限次数推送,及时 ...
- 猿创征文|【简单】微信公众号推送教程 ·可直接下载运行 ·超详细
- python微信公众号推送_python爬虫_微信公众号推送信息爬取的实例
问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...
- python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例
问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...
- 微信公众号推送课表及天气(事无巨细+JavaScript版+python版)
微信公众号推送课表及天气 22.10.16更新 我已经做出来更优秀的直接在聊天列表中推送的了! 请移步 企业微信推送 超强版! 基础 简介 作者:申也 个人网站:申也个人网站(www.dongshen ...
最新文章
- 使用Postgrest快速创建数据库的OpenAPI接口
- 资源利用率监控与存储卷(pv/pvc)
- 【快乐水题】495. 提莫攻击
- android 仿真翻页动画,Android 两Activity之间动画效果(1)---------翻页效果
- MFC中的动态创建与运行时识别
- STM32工作笔记0072---UCOSIII在STM32F103上的移植
- 2022-04-11 查询PostGIS和pgRouting的版本号
- Python 全栈开发二 python基础 字符串 字典 集合
- java参考文献大全
- 8279c语言编程,可编程键盘/显示接口芯片8279应用浅析
- linux dstat io,linux dstat工具
- 身份证号归属地 在线查询服务 api
- dx11 Shaders for maya
- 腾讯云服务器安全加固主机安全基础版和DDoS基础防护内容
- 如何在PB数据窗口中设置数据窗口的更新属性
- VB写的软件加壳都没用,超强反调试反破解分析,检测OD调试器
- 大数高精度加减、乘除、开根(C++版全套最详细、最易懂)
- 【边做项目边学Android】手机安全卫士10-设置向导之绑定SIM卡
- [组合] UOJ#308. 【UNR #2】UOJ拯救计划
- extjs的简单使用