小西贝、何小喵看熊猫之观察者设计模式
什么是观察者?
某天何小喵跟小西贝一起动物园去看动物,看到一群熊猫,在吃竹子,我们发现觉得很可爱,拍照发朋友圈。
- 何小喵小西贝:观察者
- 熊猫:被观察者
- 吃竹子:动作触发
- 拍照发朋友圈:事件
整体来说,观察者要等待被观察者做出动作,然后进行触发。
实现观察者设计
接下来我们以一个实战场景为例,发送短信。
其实可以用工厂模式+观察者+构建模式,进行设计,不过要以场景为主,不要为了设计模式而设计。
首先我们定义个主体接口
主要是用一个来控制触发事件,观察者都需要添加进去,可以把主体比作被观察(当成熊猫,然后熊猫吃竹子,然后通知观察者)
package com.binglian.message;/*** 发送观察者主体对象,其他观察者,需要添加进去*/
public interface Subject {/*** 订阅操作,添加观察者** @param observer*/void addSubscribe(Observer observer);/*** 取消订阅操作** @param observer*/void deletedSubscribe(Observer observer);/*** 触发动作,通知观察者*/void notifyTrigger();}
实现一个主体
实现发送主体(主要用于发送消息,而观察者就是发送到哪里)
package com.binglian.message.impl;import com.binglian.message.Observer;
import com.binglian.message.Subject;import java.util.ArrayList;
import java.util.List;/*** 实现主体方法,短信发送主体*/
public class SendSubject implements Subject {/*** 存储观察者对戏*/private List<Observer> observerList = new ArrayList<>();@Overridepublic void addSubscribe(Observer observer) {observerList.add(observer);}@Overridepublic void deletedSubscribe(Observer observer) {observerList.remove(observer);}@Overridepublic void notifyTrigger() {for (Observer observer : observerList) {observer.doEvent();}}
}
实现两个观察者
两个观察者,就是观察主体的情况,如果主体(熊猫发生了动作),就触发观察者(触发已经添加的观察者),
- 一个是阿里短信发送
- 一个是邮箱发送
首先定义一个观察者的接口(规范观察者)
package com.binglian.message;/*** 观察者,接口规范,让其他对象实现*** 观察者*/
public interface Observer {/*** 接收到触发条件,事件*/public void doEvent();
}
这里用了拍照日志输出,而不是用短信发送,这样更贴近最上面的图片
package com.binglian.message.impl;import com.binglian.message.Observer;
import lombok.extern.slf4j.Slf4j;/*** 阿里短信观察者*/
@Slf4j
public class AlibaObserver implements Observer {@Overridepublic void doEvent() {log.info("拍照发朋友圈");}
}
邮箱发送观察者(把比作何小喵,她来发邮件)
package com.binglian.message.impl;import com.binglian.message.Observer;
import lombok.extern.slf4j.Slf4j;/*** 邮箱发送*/
@Slf4j
public class EmailObserver implements Observer {@Overridepublic void doEvent() {log.info("邮箱发送");}
}
观察者调用
首先我们定义一个main方法,调用观察者设计
- 1、实例化一个发送主体,把观察者都添加进去。
- 2、然后我们先新增一个观察者(小西贝,拍照发朋友圈),添加到主体实现类。
- 3、熊猫吃竹子,自动触发,通知观察者,输出”拍照“(因为只添加一个小西贝)。
- 4、在添加一个观察者(何小喵),她来发邮箱。
package com.binglian.message;import com.binglian.message.impl.AlibaObserver;
import com.binglian.message.impl.EmailObserver;
import com.binglian.message.impl.SendSubject;public class Main {// 这里可以用其他形式public static Subject subject = new SendSubject();public static void main(String[] args) {// 新增观察者AlibaObserver alibaObserver = new AlibaObserver();subject.addSubscribe(alibaObserver);// 熊猫吃竹子了,触发事件subject.notifyTrigger();// 在增加一个邮箱System.out.println("------------新增一个观察者-------------");EmailObserver emailObserver = new EmailObserver();subject.addSubscribe(emailObserver);// 再次触发subject.notifyTrigger();}
}
小西贝、何小喵看熊猫之观察者设计模式相关推荐
- 绿茶餐厅拟上市:年收入16亿,连续3年盈利,次于西贝和九毛九
3月30日,港交所披露的文件显示,绿茶餐厅母公司绿茶集团有限公司(下称"绿茶集团")向港交所递交上市申请,并披露了招股书. 根据介绍,绿茶集团起步于2004年在杭州西湖景区设立的绿 ...
- 残酷!西贝一哭就有贷款,路边烧烤店想融资,还需国企员工担保
残酷!西贝一哭就有贷款,路边烧烤店想融资,还需国企员工担保 来源 | 新流财经 作者 | 小慧吖 受疫情影响,西贝餐饮集团创始人贾国龙接受媒体访问"叫苦"现金流只能撑过3个月,引发 ...
- 【小西】同步咪咕订单给咪咕方(写接口给第三方)
同步咪咕订单给咪咕方 前言 思路 实现 1.定义请求体和响应信息 MiGuOrderSyncReq MiGuOrderSyncResp 2.nacos定义好咪咕相关配置信息 3.同步咪咕参数配置 4. ...
- 小编带你两图看清北京大厂公司、码农分布——谷歌,微软,百度,腾讯,阿里,滴滴,美团,头条,独角兽
小编带你两图看清北京大厂公司.码农分布--谷歌,微软,百度,腾讯,阿里,滴滴,美团,头条 北京一二线大厂公司.码农分布 年关将至,意味着2021年即将过去,2022年即将到来 现在,就是大家开始为 ...
- 微信小程序开发多少钱 怎么看价格成本
按照功能来看,很多人还是感觉app功能会比较全面,但是小程序的功能也逐渐完善,就开发和维护成本来看,也是小程序受欢迎的原因之一.有些不可替代的事实不得不承认,APP游戏是小程序"玩" ...
- 小西的快乐乘法表(想不到怎么做到同时输入两个数,并同时输出两张乘法表,求助)
我只能写出输出一个乘法表的代码,在下面 9月10号!新生小西高兴的走到广西大学,看到了正门的十二根柱子,突然想开始背诵乘法表! 不过小西已经是大学生了!所以想背任意前A行乘法表! Input 输入多行 ...
- 小娴的男友小旭不幸患了一种怪病,这种怪病吞噬了他的大部分记忆,同时让他突然间不会书写符合正确语序的英文。神奇的是,虽然他写出的句子看上去杂乱无章,不过经过仔细分析可以发现,如果把单词的顺序倒过来,语法
题目描述 小娴的男友小旭不幸患了一种怪病,这种怪病吞噬了他的大部分记忆,同时让他突然间不会书写符合正确语序的英文.神奇的是,虽然他写出的句子看上去杂乱无章,不过经过仔细分析可以发现,如果把单词的顺序倒 ...
- 火山小视频消重复技巧 怎么看视频md5
火山小视频消重复技巧 怎么看视频md5 那么在抖音投放广告的费用需要多少呢?A5抖音广告平台提示您:抖音广告费用通常按照达人的粉丝数量.获赞数量,视频播放数量,以及 ...
- 以微信小程序相册为例,看Serverless DevOps最佳实践
导语 | 近日,云+社区技术沙龙"高效智能运维"圆满落幕.本期沙龙围绕运维展开了一场技术盛宴,从AIOps.Serverless DevOps.蓝鲸PaaS平台.K8S等分享关于业 ...
最新文章
- docker部署xxl-job 通用反射执行器
- 软件开发质量控制-CMMI读后疑问
- linux问题排查常用命令详解
- Node的异步与java的异步_node.js和异步编程回文
- 仿微软Office 迷你工具条(简易编辑器)
- lisp语言100以内勾股数_三个视频搞定:函数的最值、对勾函数、分式函数性质与图像、分段函数最值...
- MAC 打开safari和Chrome打开开发者工具的快捷键
- matlab 工具函数 —— normalize(归一化数据)
- LNMP建站分离部署
- 点击微信网页的a标签直接跳转到淘宝APP打开怎么实现的?附:动图演示效果
- Race Condition是什么
- ENSP-----ISIS协议
- Js 摄氏度和华氏度的转换
- es文件搜索不到win7服务器,ES文件浏览器Win7局域网共享错误解决方案
- 室内地图导航应用小程序-前端知识体系图
- webp图片介绍及用法总结
- JavaScript(JS) date.getDay()
- 剪辑视频的方法有哪些
- Redhat Linux 5.3环境实施DB2 V9.7 HADR
- 微信小程序有哪些?401~500