打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一图胜千言|谈谈设计模式与Java多线程的学习 | 文末送书


在数据展示的时候,我们都知道,干巴巴的罗列数字,并不直观。如果有柱状、折线、饼图之类的对比图,做到数据可视化,则会一目了然。

在技术领域也一样,有些概念,都是开发经验丰富的「老司机」写出来,相当的浓缩,需要阅读者有相当的开发经验才能化的开,理解透彻。如果在技术内容中,能够像数据可视化一样,增加「饼图」,给我们画个饼,就更易于理解。可谓一图胜千言啊。


今天我们推荐两本能给我们在技术内容之外「画饼」的书,便于吸收,一口气上五楼。 :>


设计模式


一直以来,在软件开发领域,有一些类似珍稀武功秘籍一样的内容,掌握之后,可以将软件设计的更优美,对于开发能更便于解耦和扩展,这其中之一就是「设计模式」。


此外,对于模式,在我们技术人员讨论方案,这个模式相当于一种共同可以理解的语言,说这里用个单例,那里需要代理,彼此即可意会。


也正因为通用,在软件开发中会经常看到设计模式,特别是开源软件盛行的今天,理解了设计模式,我们在阅读开源代码时,能更快的理解作者的设计意思,抓住脉络。


我在之前的几篇文章里写过Tomcat源代码中的设计模式使用,可以搭配着看。

和Tomcat学设计模式 | 责任链模式及Filter的工作原理

和Tomcat学设计模式 | 模板方法模式

和Tomcat学设计模式 | 发布-订阅模式

和Tomcat学设计模式 | Facade模式与请求处理


我们最早听说设计模式估计都是从课堂上老师的口中,或者某些技术书籍中,类似于这里使用了工厂模式、那里使用了模板方法模式,其中有一个地方用到了策略模式等等。


说到这些模式之后,基本都会提到鼎鼎大名的GoF - 设计模式四人帮。正是这四个人将这一系列在软件开发中可能经常用到,又经过时间考验的模式提炼加工,并为之命名,成为我们今天看到的这常用的23种模式的样子。


以往我们提到设计模式,基本的划分方式都是按照GoF的分类

  • 结构型模式

  • 创建型模式

  • 行为型模式



比如把 Factory、Singleton 归为创建型模式,把 Facade、 Adapter归为结构型模式,把 Strategy、Template Method等归为行为型模式。


GoF的描述,相对比较精炼,需要反复的读才能理解其中设计的精妙,或者需要有较丰富的OOP经验。


最近发现一本讲述设计模式的书「图解设计模式」。


这本书并没有沿袭GoF一直以来的模式划分方式,而是更细致的根据具体做用,将分类做了细化。

比如:


  • 交给子类 -- Template Method、Factory Method模式

  • 生成实例 --  Singleton、Prototype 模式

  • 分开考虑 -- Bridge、Strategy模式

  • 简单化 -- Facade、Mediator 模式

  • 管理状态 -- Observer、Memento模式



同时对于模式,初学者一直的困扰是「这都是啥?」根据名字并不能直观的理解这个模式大致的意图。这个在书中也都给一一做了简要描述


在图解设计模式一书中,对每个模式都会有一个形象的图来概括这个模式,同时还有一句简短且易用理解的句子来描述模式。

比如对于策略模式:


整体的替换算法


通过这句描述可以比Strategy能更好的理解模式背后的意思吧。在详细讲解模式时,还有一小段文字来详细的描述。另外,再辅以下方在不同情况下适配的不同插头。很形象。


在对模式的讲解中,会先通过软件开发的「通用语言」- UML 图来展示。

在这之后会有具体的代码。


代码之外,作者的书还有一个特点:

将模式中各个涉及到的类抽象为「角色」。就像影视剧一样,通过角色来理解剧情,而不是仅着眼于具体的示例代码,不能做到活学活用。


同时,每个模式最后,会有「拓展思路的要点」和「相关的设计模式」两部分内容。第一部分相当于追问使用之后有哪些优势及劣势,第二部分则会对比类似的模式。


当然,对于模式的学习,正如作者在书中所说,不能只看书里的案例,还要自己思考一些案例,同时理解模式中对应的角色,通过抽象的角色来面对模式适用的不同场景,将模式化用到设计与编程中。



Java并发编程


坦白的说,对于任何编程语言来说,多线程编程都不是个容易学的内容。这源于多线程编程的复杂性。

方法的互斥,内存的可见性、线程的切换与优先级、死锁、甚至环境的复杂与隐蔽等等,有些单线程处理正常的程序,放到多线程环境中会有各种各样的问题。问题产生后还难以复现。


但多线程又是一个不得不面对的问题,机器硬件性能越来越高,核越来越多,相应的软件却没有利用起来,岂不是暴殄天物。


在Java并发编程方面,一直以来神书是Brian Goetz的「Java并发编程实战」。

此外就是已经绝版的Doug Lea 的著作。


那对于信息量不小的Java并发编程,往往每个概念都会让人望而却步。比如 Java内存模型(JMM),比如volatile如何影响可见性与指令重排序,什么是Happens-Before,如何应用线程池,wait与notify是如何工作的,如何分别针对读与写的线程进行优化?




关于内存可见性,如果有这样一张图,会不会清晰明了呢?我们看到volatile 在读写时,两只小眼睛一直盯着共享内存中的数据,不受缓存的干扰。



今天推荐一本与前面「图解设计模式」同一作者的书「图解Java多线程设计模式」,通过模式的方式来讲述Java并发编程。



讲述风格同前面的书一致,依然是一图胜千言。


比如读写锁,写的线程就会被阻塞等待锁



对于并发涉及到的关键「人物」,也通过模式中的「角色」来描述


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
J2EE学习
一定要偷偷学,偷偷进步!腾讯内部首发Java多线程、高并发、设计模式“满级”笔记
分析了4000万条Stack Overflow讨论帖:这些才是最受欢迎的编程书
GoF设计模式之十六 Iterator- -
老哥整理最强一份Java读书清单
高手问答,Java多线程编程设计模式篇
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服