首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
04-09 16:22
南京师范大学 嵌入式工程师
研二找实习求指点
点赞
评论
收藏
分享
04-08 10:53
已编辑
南京林业大学 后端工程师
京东物流后端一面
发面经攒人品没问太深,而且问的时间不到半小时,无手撕代码,感觉有点像kpi面。自我介绍啥时候能来实习实习干的什么,实习了多久,讲讲实习具体的工作redis大key问题是什么,怎么优化比如有个hash的大key,某个版本拆开后删掉了,那么怎么保证数据的一致性如果有很多商品,redis内存不足了,怎么办?你选择哪种淘汰策略?你选了最近最少使用,那么一个刚刚被淘汰的又被查询了,会发生什么?讲一讲项目中分布式锁的使用场景和实施方案Threadlocal内存泄露讲一下,怎么避免如果业务逻辑抛出异常了,会不会导致最后的remove没有执行?你怎么确保一定remove了?你做的这个agent项目是基于开源项...
查看18道真题和解析
点赞
评论
收藏
分享
02-21 17:19
电子科技大学 Java
这个简历可以去找暑期实习了吗
大佬们看看,有没有什么还要修改的地方,第一个项目做的是黑马点评,加了一个rabbitMQ,第二个项目是鱼皮的API开放平台结合了一下鱼皮的大语言对话模型项目
手撕震撼面试官一整年:
电子科大加上加粗加上985
点赞
评论
收藏
分享
04-03 18:59
吉林大学 Java
米哈游何意味
就不投
大专人陈义:
别投了,我看到有人点了第二个链接投递,还没退出界面,不合适的邮件就发过来了
点赞
评论
收藏
分享
04-06 08:06
蚌埠坦克学院 嵌入式软件开发
有个烂工作比没有好
在求职过程中,“有个工作总比没有好”这句话听起来有些现实,却往往贴近真相。相比长期空窗,一份哪怕不那么理想的工作,至少能让人保持在职场的节奏中。它提供了基本的收入来源,也让人持续接触真实的工作环境,避免与行业脱节。
烂工作和没工作哪个更痛苦...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
大模型Agent面试全攻略(附答题思路)
3.8W
2
...
我感觉我遇到神仙mentor了
1.1W
3
...
谁都可能在说谎,但财报不会骗人
8205
4
...
春招产品内卷到什么程度了
7558
5
...
秋招失利别慌,好offer不怕晚
7085
6
...
入职翼支付2年多,聊聊感受
5967
7
...
上线一个月了,说几句真心话
4360
8
...
字节一二三hr面 java面经(已off)
3982
9
...
我在北京的2046天
3779
10
...
淘天aiagent一面
3709
创作者周榜
更多
正在热议
更多
#
Agent面试会问什么?
#
30606次浏览
1218人参与
#
通信/硬件的薪资开多少,才值得去?
#
76203次浏览
406人参与
#
厦门银行科技岗值不值得投
#
18555次浏览
420人参与
#
面试体验最好和最差的公司
#
22282次浏览
159人参与
#
美团笔试
#
888958次浏览
5592人参与
#
我的求职进度条
#
979076次浏览
6512人参与
#
哪些公司一直卡在简历筛选
#
103231次浏览
339人参与
#
拿到offer之后,可以做些什么
#
103253次浏览
505人参与
#
说说你知道的学历厂
#
399111次浏览
1420人参与
#
平台or薪资 硬件uu更看重哪个
#
167037次浏览
624人参与
#
bilibili求职进展汇总
#
190550次浏览
1091人参与
#
听劝,这个公司值得去吗
#
714678次浏览
2024人参与
#
一人分享一个skill
#
7999次浏览
218人参与
#
春招至今,你收到几个面试了?
#
78719次浏览
1041人参与
#
给工作过的公司写一条大众点评,你会怎么写?
#
10739次浏览
131人参与
#
美团秋招笔试
#
207953次浏览
1166人参与
#
拼多多工作体验
#
55121次浏览
387人参与
#
一人说一个提前实习的好处
#
122926次浏览
715人参与
#
烂工作和没工作哪个更痛苦?
#
17814次浏览
271人参与
#
巨人网络求职进展汇总
#
193640次浏览
1232人参与
#
AI替代不了什么?
#
12010次浏览
201人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务