首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
08-07 16:02
河北农业大学 测试工程师
中兴通讯综合测评挂
测评居然都会挂的??7月份就投的,前两天才发测评,今天一看直接挂了?麻了 我觉得我做的挺认真的啊...
投递中兴通讯等公司10个岗位
点赞
评论
收藏
分享
08-07 11:10
哈尔滨工业大学 机械工程师
汇川技术挂
请问各位佬双2挂了是专业方向原因吗
投递汇川技术等公司10个岗位
点赞
评论
收藏
分享
06-16 19:09
河南开封科技传媒学院 Java
26届暑假想找java实习
面试官要完简历之后大部分都是已读不回,大佬能帮我看看我的简历有什么问题吗
牛客83700679...:
简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞
评论
收藏
分享
06-16 11:40
浙江大学
华为终端bg终端云服务实习
投票
华黑子进程百分之60。Base杭州通软从5.28开始泡池子,到现在泡了20天了,hr那边说还在审批,具体流程他没有权限看不到。请问各位uu有没有已经开奖开出来的,孩子快疯了。
华为求职进展汇总
点赞
评论
收藏
分享
08-07 14:58
北京邮电大学 硬件开发
大疆笔试
会考什么呀?硬件岗
投递大疆等公司10个岗位
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
25年秋招精心整理的最新互联网大厂笔面试题集合
2.4W
2
...
26秋招-拓竹嵌入式软件面经
3512
3
...
重生之我在牛客写简历。
2965
4
...
暑期实习转正自评,你就这么写!
2944
5
...
字节意向
2886
6
...
唯品会Java一二面
2614
7
...
字节秋招意向
2614
8
...
今天中午恍惚了好一阵子
2568
9
...
影石嵌入式驱动开发面经
2183
10
...
亚信科技java实习面经
1963
创作者周榜
更多
正在热议
更多
#
实习的内耗时刻
#
7518次浏览
103人参与
#
每个月的工资都是怎么分配的?
#
57843次浏览
560人参与
#
腾讯大前端岗位热招中
#
12892次浏览
132人参与
#
你上一次给父母打电话是什么时候
#
3216次浏览
39人参与
#
独居后,你的生活是更好了还是更差了?
#
2524次浏览
42人参与
#
规定下班时间vs实际下班时间
#
5384次浏览
50人参与
#
去哪儿旅行秋招
#
220199次浏览
3153人参与
#
工作上你捅过哪些篓子?
#
4059次浏览
29人参与
#
视觉/交互/设计百问百答
#
52415次浏览
442人参与
#
你觉得材料多少算高薪
#
21964次浏览
148人参与
#
秋招笔面试记录
#
87842次浏览
1693人参与
#
央国企投递记录
#
98301次浏览
1408人参与
#
美团秋招笔试
#
61160次浏览
400人参与
#
入职第二天,午饭怎么解决
#
26124次浏览
73人参与
#
tplink提前批进度交流
#
194971次浏览
1477人参与
#
2023毕业生求职有问必答
#
186689次浏览
1629人参与
#
你们公司哪个部门最累?
#
29696次浏览
213人参与
#
找工作有哪些冷知识
#
137730次浏览
2337人参与
#
牛友们的论文几号送审
#
49875次浏览
797人参与
#
今年形式下双非本找得到工作吗
#
207073次浏览
1278人参与
#
你觉得现在还能进互联网吗?
#
20484次浏览
186人参与
#
得物求职进展汇总
#
103420次浏览
826人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务