《设计模式就该这样学》之微信和QQ这么多群,该如何管理好友关系?

然后创建ChatRoom类。

public class ChatRoom {

public void showMsg(User user, String msg) {

System.out.println(“[” + user.getName() + “] :” + msg);

}

}

最后编写客户端测试代码。

public static void main(String[] args) {

ChatRoom room = new ChatRoom();

User tom = new User(“Tom”,room);

User jerry = new User(“Jerry”,room);

tom.sendMessage(“Hi! I am Tom.”);

jerry.sendMessage(“Hello! My name is Jerry.”);

}

运行结果如下图所示。

图片

4 中介者模式在JDK源码中的应用


首先来看JDK中的Timer类。打开Timer的结构,我们发现Timer类中有很多schedule()重载方法,如下图所示。

图片

任意点开其中一个方法,我们发现所有方法最终都调用了私有的schedule()方法,源码如下。

public class Timer {

public void schedule(TimerTask task, long delay) {

if (delay < 0)

throw new IllegalArgumentException(“Negative delay.”);

sched(task, System.currentTimeMillis()+delay, 0);

}

private void sched(TimerTask task, long time, long period) {

if (time < 0)

throw new IllegalArgumentException(“Illegal execution time.”);

if (Math.abs(period) > (Long.MAX_VALUE >> 1))

period >>= 1;

synchronized(queue) {

if (!thread.newTasksMayBeScheduled)

throw new IllegalStateException(“Timer already cancelled.”);

synchronized(task.lock) {

if (task.state != TimerTask.VIRGIN)

throw new IllegalStateException(

“Task already scheduled or cancelled”);

task.nextExecutionTime = time;

task.period = period;

task.state = TimerTask.SCHEDULED;

}

queue.add(task);

if (queue.getMin() == task)

queue.notify();

}

}

}

而且,不管是什么样的任务都被加入一个队列中按顺序执行。我们把这个队列中的所有对象都称为“同事”。同事之间的通信都是通过Timer来协调完成的,Timer承担了中介者的角色。

设计模式系列文

《设计模式就该这样学》之彻底搞懂Spring状态机原理,实现订单与物流解耦

《设计模式就该这样学》之手写自定义迭代器,秒懂迭代器底层原理

《设计模式就该这样学》之意外发现,原来你不知道自己每天都在用门面模式

《设计模式就该这样学》之实战案例,让抽象工厂不再抽象

面试结束复盘查漏补缺

每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。

以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

重要的事说三遍,关注+关注+关注!

历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

image.png

更多笔记分享

历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

Redis、Java并发编程等等面试题和答案,用于参考~

重要的事说三遍,关注+关注+关注!

[外链图片转存中…(img-PRFfXqSK-1714505610236)]

[外链图片转存中…(img-MhPXd33n-1714505610237)]

更多笔记分享

[外链图片转存中…(img-vudkDbwq-1714505610237)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值