首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
02-18 16:25
中北大学 测试开发
测试开发 - 小天才 - 二面
自我介绍在学校里面学的好的课程有哪些网络七层模型TCP/IP 四层模型为什么会有这些分层IPV4 和 IPV6 的区别数据库的各个范式,具体讲解实习经历中的工具开发部分,具体讲解这个工具的需求方是哪个部门功能测试的经历具体讲解,其中回归测试的流程如何看待大模型技术的发展大模型的原理以及可能出现信息错误的原因有哪些优点有什么缺点有什么兴趣爱好为什么对公司的这个岗位有意向薪资待遇方面有什么期望反问环节:
查看11道真题和解析
点赞
评论
收藏
分享
02-21 16:44
上海交通大学 算法工程师
网易游戏用户运营二面
岗位名称:游戏用户运营面试时长:50min自评分:8/10是否下一轮:是游戏理解与产品表达能力如果让你向一个没玩过的人推荐永劫无间,你会怎么介绍?(追问)如果推荐对象是轻度玩家,你会调整介绍方式吗?你觉得永劫无间最核心的玩法特色和竞争优势是什么?(追问)和传统吃鸡类游戏相比,它最大的差异在哪里?你认为这款游戏解决了玩家哪些核心需求?(追问)这些需求是功能层面的,还是情绪层面的?用户画像与竞品对比你觉得永劫无间的核心用户群体画像是怎样的?(追问)从年龄、游戏经历、消费能力等角度展开说一下。你认为它的用户和洲瓦的用户有哪些明显不同?(追问)这些不同是否体现在玩法偏好或付费习惯上?这些差异会对运营策...
运营必备题库
点赞
评论
收藏
分享
01-26 12:25
科大讯飞_智慧医疗架构平台部_助理软件开发工程师(实习员工)
大家是实习期间是怎么保持面试状态的
如题,楼主最近找了家小厂实习,每天任务蛮多的,虽然也有时间去背八股刷题,但是相比在学校每天全身心的投入背八股和刷题,真的差太多时间分配上很碎片化,有时候刷着刷着题,mt 提个需求就需要去忙他那边的问题,忙完回来接着学,然后又有其他问题下班回宿舍也没啥状态再学了,回宿舍就只想躺平😅
小肥罗:
回宿舍,每天花半个小时,一个小时学习一下,日积月累,你就学到很多啦
点赞
评论
收藏
分享
2025-12-29 13:59
西安电子科技大学 单片机
春招简历求拷打
本科没学到啥东西,开源项目做了俩个,请问大伙怎么改一下简历好呢?
牛大了202X:
不要自我评价 学校可以标注下211 hr一眼定位
点赞
评论
收藏
分享
昨天 15:50
山东大学 嵌入式软件工程师
从LLM到Agent,每个关键词其实什么意思
下面这些词你认识几个?面试的时候被问到,能不能每一个都流畅的讲明白? 所谓智能体,其实是由所有"不需要智能"的部分拼凑而成的;那些花里胡哨的新概念,大多不过是新瓶装旧酒。 涉及关键词: LLM Prompt Context Memory Agent RAG Function Calling MCP Skill Sub-Agent 💡 先清空大脑 忘掉你已知的一切,跟着故事线走--你会发现这些概念都是从同一个起点,一步步生长出来的。 🧠 第一步:语言模型长大了 一切混乱的起点,是这个古老的东西——语言模型。早期的小模型基本上是个智障,只会简单的文字接龙。不知道合不合适,...
SAGIMA经验浅谈
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
实习租房焚决
4213
2
...
嵌入式应届生春招怎么准备——从零到拿 Offer 的系统攻略
2528
3
...
04男大去相亲了
1082
4
...
暑期实习来得及吗
1082
5
...
HTTP 和 HTTPS 区别
1031
6
...
专升本三本计科应届,Java学了又停、试了几份工都不合适,现在毕设快做完,是继续死磕Java开发,还
872
7
...
他山科技一面
802
8
...
关于租房
677
9
...
美团推荐算法一面
609
10
...
这个简历可以去找暑期实习了吗
588
创作者周榜
更多
正在热议
更多
#
牛客AI体验站
#
18251次浏览
314人参与
#
记录实习开销
#
185145次浏览
842人参与
#
牛客新年AI问运
#
16095次浏览
175人参与
#
大家每天通勤多久?
#
84108次浏览
707人参与
#
正在实习的你,几点下班
#
297551次浏览
2081人参与
#
牛客租房专区
#
154635次浏览
1629人参与
#
不给转正的实习,你还去吗
#
2627584次浏览
22923人参与
#
选择和努力,哪个更重要?
#
191448次浏览
1497人参与
#
如何缓解入职前的焦虑
#
259966次浏览
1458人参与
#
我的岗位说明书
#
308162次浏览
2753人参与
#
有转正机会的小厂实习值得去吗?
#
1198次浏览
22人参与
#
金融银行求职进展汇总
#
309760次浏览
1686人参与
#
你小时候最想从事什么职业
#
154216次浏览
2059人参与
#
校招入职后的感受
#
488700次浏览
3682人参与
#
入职第一天
#
47658次浏览
554人参与
#
投递无反馈,如何优化求职策略?
#
8760次浏览
43人参与
#
工作后会跟朋友渐行渐远吗
#
60315次浏览
415人参与
#
你最讨厌面试被问什么
#
2164次浏览
30人参与
#
牛友们,签完三方你在忙什么?
#
137650次浏览
997人参与
#
帆软软件工作体验
#
14729次浏览
86人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务