首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
课程
专栏·文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
土拨猫
C++
发布于湖北
关注
已关注
取消关注
@程序员打工人:
【设计模式】Java设计模式 - 观察者模式
简介 观察者模式又叫发布-订阅(Publish-Subscribe)模式,是对象的行为模式,订阅是表示这些观察者对象需要向目标对象进行注册,这样目标对象才知道有哪些对象在观察它。发布指的是当目标对象的状态改变时,它就向它所有的观察者对象发布状态更改的消息,以让这些观察者对象知晓。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 就像数学函数那样,设函数y=x²,y随着x的增长而增长,我就称x为自变量,y为因变量。 1、描述 在现实中,有些条件变化会带着一些列的变化,这就需要用if,就比如电商,一家商家与许多平台合作,每当有新产品的时候,就需要吧产品推送给各个平台,当有其他平台后来加入合作,那就需要在if中进行添加逻辑。这样会导致代码量变多,不便于维护。然而使用观察者模式便于维护,也能够扩展。 观察者模式UML如图: 2、实例 本次实验通过定义产品列表作为被观察对象,定义两个观察者观察变化,在测试中添加产品,使得被观察对象向观察者发送消息。也就是发布-订阅模式。 ①、产品列表 观察者模式是在观察者和被观察者双方,观察者可以是多个。在产品列表类中需要继承java.util.Observable的方法。 构建方法私有化,采用单例模式,避免直接通过new的方式去实例化对象,而是通过getInstance方法去实例化对象。 可以通过addProductListObserver方法来添加一个观察者。 addProduct用来添加产品,并且通知观察者 package com.lyd.demo.product; import java.util.ArrayList; import java.util.List; import java.util.Observable; import java.util.Observer; /** * @Author: lyd * @Description: 被观察的产品对象 * @Date: 2022-08-20 */ public class ProductList extends Observable { private List<String> productList = null; // 产品列表 private static ProductList instance; // 唯一实例 private ProductList() {} // 构建方法私有化 /** * 获取唯一实例 * @return 实例 */ public static ProductList getInstance() { if (instance == null) { instance = new ProductList(); instance.productList = new ArrayList<String>(); } return instance; } /** * 增加观察者(电商接口) * @param observable 观察者 */ public void addProductListObserver(Observer observable) { this.addObserver(observable); } public void addProduct(String newProduct) { productList.add(newProduct); System.out.println("产品列表新增加了产品:" + newProduct); this.setChanged(); // 设置被观察对象发送变化 this.notifyObservers(newProduct); // 通知观察者,并传递新产品 }} ②、观察者 构建两个观察者,简单做个打印,观察者需要实现java.util.Observer接口,并且实现update方法。 淘宝: package com.lyd.demo.observer; import java.util.Observable; import java.util.Observer; /** * @Author: lyd * @Description: 淘宝观察者接口 * @Date: 2022-08-20 */ public class TaoBaoObserver implements Observer { public void update(Observable o, Object product) { String newProduct = (String) product; System.out.println("发送给新产品:" + newProduct + " 同步到淘宝商城"); }}、、 京东: package com.lyd.demo.observer; import java.util.Observable; import java.util.Observer; /** * @Author: lyd * @Description: 京东观察者接口 * @Date: 2022-08-20 */ public class JingDongObserver implements Observer { public void update(Observable o, Object product) { String newProduct = (String) product; System.out.println("发送给新产品:" + newProduct + " 同步到京东商城"); }} ③、测试 先添加观察者,在添加产品,这样就能看到被观察者发布消息给观察者。
点赞 4
评论 1
全部评论
推荐
最新
楼层
滴滴
校招火热招聘中
官网直投
相关推荐
Super_Z2024
05-14 17:35
深圳大学 电子信息类
5.14 深圳吉兰丁开发一面(暑期实习)
面的第一个小公司,问的全是八股。自我介绍ArrayList和LinkedList的区别是什么?Redis缓存穿透、击穿、雪崩解决方案?Redis持久化策略?IOC和AOP了解吗?Spring框架接收参数的注解?索引的类型?如果SQL比较慢?怎么优化?反问:对公司有什么想要了解的?
点赞
评论
收藏
转发
在迎接offer的秋招侠很勇敢
05-17 15:15
售后专员
不建议大学找实习的时候去当店员
我之前在无印良品店干过店员,每天都要不停地叠衣服、理货和补货,工作节奏很快,每天都感觉很累,没有停歇的时候。个人觉得找份更好的实习或家教工作,都比去当店员要好
点赞
评论
收藏
转发
有力量的杰克吃不饱
03-30 02:11
南开大学 计算机类
是我不配了
只走了两分钟流程?!
点赞
评论
收藏
转发
牛客266932807号
05-16 14:47
电子科技大学 计算机类
oppo 好直白
已违约 这种是不是被拉黑了 秋招也投不了了
点赞
评论
收藏
转发
点赞
收藏
评论
分享
回复帖子
全站热榜
1
...
盲审已过,答辩已过,工作已签
3.1W
2
...
聪明人看的Java后端入门路线(应该比大多数高手给的靠谱)
9181
3
...
【有奖活动】浅聊一下我的实习⭐
8965
4
...
实习难求——做个总结
8749
5
...
pcg qq 一面
8118
6
...
腾讯一面凉经 5.16
6271
7
...
25届暑期实习中后期更容易拿offer
5274
8
...
26届菜鸡投了一个月大厂日常,0面试绷不住了呀。听说9月后机会可能会多起来,感觉要被迫继续沉淀了之前和导师聊,说找到大厂实习的话可以去,对就业帮助大,小厂的话就emmm投了快一个月,老板上打招呼绝大数
4682
9
...
菜鸟一面 无项目 无手撕 1hour
2909
10
...
求各位大佬给个建议吧
2558
正在热议
#
牛客帮帮团来啦!有问必答
#
774213次浏览
12170人参与
#
机械制造薪资爆料
#
313238次浏览
3616人参与
#
海康威视求职进展汇总
#
97238次浏览
1174人参与
#
毕业租房也有小确幸
#
26629次浏览
1477人参与
#
夸夸我的求职搭子
#
65869次浏览
808人参与
#
荣耀求职进展汇总
#
67783次浏览
680人参与
#
宁德时代求职进展汇总
#
36262次浏览
400人参与
#
你的工作大概什么时候入职?
#
4131次浏览
52人参与
#
简历无回复,你会继续海投还是优化再投?
#
22389次浏览
316人参与
#
非技术岗是怎么找实习的
#
76892次浏览
1430人参与
#
打工人的辛酸
#
8942次浏览
146人参与
#
实习生应该准时下班吗
#
79432次浏览
587人参与
#
本周投递记录
#
201773次浏览
5125人参与
#
投递实习岗位前的准备
#
618278次浏览
11022人参与
#
找工作中的意难平
#
193895次浏览
3439人参与
#
产品实习,你更倾向大公司or小公司
#
38438次浏览
592人参与
#
谈薪时HR压价该怎么应对
#
38007次浏览
259人参与
#
Offer比较,你最看重什么?
#
52423次浏览
501人参与
#
如何写一份好简历
#
269466次浏览
4037人参与
#
学历对求职的影响
#
138372次浏览
1575人参与
牛客网
牛客企业服务