# 《并发设计模式》第06章-不可变模式-实战案例:实现消息聚合发送系统

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:掌握不可变模式的核心原理,掌握不可变模式的实际项目应用场景,重点掌握不可变模式解决实际问题的落地方案,并能够将不可变模式灵活应用到自身实际项目中解决线程安全问题。

大家好,我是冰河~~

鉴于小菜学完了不可变模式后,了解了不可变模式的概念,如何写一个不可变类,但此时还是对不可变模式的使用场景,如何落地到实际项目中一知半解。于是老王拿出了自己之前基于不可变模式写的一个实际项目案例给小菜进行讲解。

# 一、故事背景

学完不可变模式后,小菜下班回到家,心里想着不可变模式如何正确应用到实际项目中,如何在实际项目中进行落地实现,结果思来想去还是不知道具体怎么应用。于是,小菜决定还是问问老王,老王有着丰富的项目实战经验,他应该知道不可变模式怎么落地到实际项目中。

于是,第二天,小菜还是早早的来到公司,等着老王来公司后,寻求老王的帮助,老王听完小菜的诉求后,将小菜叫到到会议室,打开了自己之前基于不可变模式开发的消息聚合发送系统,并为小菜进行了具体的讲解。

# 二、案例需求

消息聚合发送系统属于公司整体项目的一个子系统,用来支撑公司项目的消息聚合和发送业务,并且消息的发送功能会聚合多个消息推送服务商,比如极光推送,信鸽推送,友盟推送等等。如图6-1所示。


在真正发送消息时,并不会向所有的消息推送服务商推送消息,也不会固定一个消息推送服务商,而是根据一定的策略从多个消息服务器商中选择一个最佳的消息服务商,调用其接口进行消息推送,如图6-2所示。


看到这里,小菜不禁发问:“这跟不可变模式有啥关系呢?”。

老王笑着说:“别急,这个消息聚合发送系统在实现上就是使用不可变模式实现的,接下来,我们来看看他的具体实现,你就明白了”。

# 三、可变模式存在的问题

“在真正实现不可变模式之前,为了加深你对不可变模式在实际项目场景的理解,我们看看不使用不可变模式实现的话,存在哪些问题”,老王说。

“好的”,小菜回应到。

于是老王就按照没有使用不可变模式的方式实现了消息聚合发送系统的核心类,并为小菜讲解这种实现方式会存在哪些问题。

# 查看全文

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码