首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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:19
上海交通大学 游戏后端
秋招失利别慌,好offer不怕晚
大家好,我是25届985硕。记得当时秋招结束后,我把自己关在宿舍整整三天。因为投递得晚,很多公司都已经招满了。简历投了40多家,面试了七八轮,最终全军覆没。室友们陆续拿到offer,只有我还在刷招聘软件,那种焦虑和挫败感,相信现在正在准备春招的你一定懂。 当时我甚至开始怀疑,是不是自己真的不行。但后来我明白了一件事:秋招失利不代表终点,好offer不怕晚。 转机出现在次年2月底,我在牛客上刷到巨人网络的春招信息。因为我一直很喜欢游戏,算是《太空杀》的忠实玩家,就想着投递游戏开发试试看。没想到,7天内收到了笔试邀约,然后很快收到了邀请到巨人网络园区面试,当天把所有面试流程走完,也顺利拿到了off...
ros275229:
秋招结束可以等春招,问题是现在春招都要结束了
巨人网络成长空间 113人发布
点赞
评论
收藏
分享
03-31 00:39
门头沟学院 C++
我的暑期结束了,0offer
南岗痞子:
不还有俩没结束吗
点赞
评论
收藏
分享
04-06 11:12
北京理工大学 Python
蚂蚁ai coding需要二次做吗
3月份做过一次ai coding了,那次一面挂了。重新投了其他岗位之后,又给我发ai coding了,我看邮件,这个不是只能做一次吗?4.1发的邮件,我没做,今天又给我发了,官网是蓝点。uu门,我需要做吗?
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
大模型Agent面试全攻略(附答题思路)
3.8W
2
...
我感觉我遇到神仙mentor了
1.1W
3
...
谁都可能在说谎,但财报不会骗人
1.0W
4
...
春招产品内卷到什么程度了
7652
5
...
秋招失利别慌,好offer不怕晚
7174
6
...
入职翼支付2年多,聊聊感受
6041
7
...
淘天aiagent一面
4414
8
...
字节一二三hr面 java面经(已off)
4414
9
...
上线一个月了,说几句真心话
4373
10
...
有了这个skill我再也没手动改过简历
4100
创作者周榜
更多
正在热议
更多
#
Agent面试会问什么?
#
31355次浏览
1240人参与
#
通信/硬件的薪资开多少,才值得去?
#
76269次浏览
406人参与
#
厦门银行科技岗值不值得投
#
18623次浏览
421人参与
#
面试体验最好和最差的公司
#
22602次浏览
161人参与
#
美团笔试
#
890120次浏览
5598人参与
#
我的求职进度条
#
979510次浏览
6512人参与
#
哪些公司一直卡在简历筛选
#
103574次浏览
340人参与
#
拿到offer之后,可以做些什么
#
103407次浏览
505人参与
#
说说你知道的学历厂
#
399468次浏览
1421人参与
#
平台or薪资 硬件uu更看重哪个
#
167083次浏览
624人参与
#
bilibili求职进展汇总
#
190684次浏览
1091人参与
#
听劝,这个公司值得去吗
#
714862次浏览
2024人参与
#
一人分享一个skill
#
8233次浏览
221人参与
#
春招至今,你收到几个面试了?
#
80328次浏览
1055人参与
#
给工作过的公司写一条大众点评,你会怎么写?
#
10949次浏览
131人参与
#
美团秋招笔试
#
208000次浏览
1166人参与
#
拼多多工作体验
#
55154次浏览
387人参与
#
一人说一个提前实习的好处
#
122992次浏览
715人参与
#
烂工作和没工作哪个更痛苦?
#
18115次浏览
271人参与
#
巨人网络求职进展汇总
#
193650次浏览
1232人参与
#
AI替代不了什么?
#
12189次浏览
201人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务