java中的23种设计模式哪些是必须要掌握的?

目前只了解单例设计模式
关注者
83
被浏览
98,524

24 个回答

嗯,没有

很不幸

几乎没有一个设计模式,是你必需掌握的

就以你说的单例模式为例

现在版本的java

实现singleton非常简单,你只需要

enum Singleton{
SINGLETON
//你要实现的方法,属性等,写在这里,这些跟普通的class一样
}

好了

所以其实单例在enum这特特殊的class出来之后,基本上这个模式就死掉了

就你不需要费心思去写那么一大堆的单例的实现,因为没有必要

记住,enum就是内存中有限个对象的class,class理论上可以无限多个对象嘛,而单例,双例甚至三例这些,都可以看成是enum的特殊情况

所以你可以用enum实现单例

搞定了

之前之所以有那么多设计模式,还23种啥的,一个重要原因是,当时的java,语言特性较弱

而且当时java的语法进化的速度也比较慢,好几年才出一个版本

所以当时为了弥补java的一些不足,人们搞出了一大堆设计模式

而这些设计模式最早也不是针对java,而是针对c++的,gang of 4的那本书,有三个语言版本,java是最年轻的,最早是c++和smalltalk,然后java流行之后,才出了java版

但是随着java语言自身的演化,你就会发现,那些古早的经验啊,比如这些设计模式

就没用了

你可以把代码用很简洁的方式写出来,完全没有必要搞那么复杂

再比如spring的di,对吧,inject

这个在java的static import出现之后,就变得毫无价值

你不需要spring和di,你也能用static import实现相同的效果

当然这里面会有一些差异,但是大同小异了

所以现在外国啊,对于spring就没有那么积极了,相反,像red hat这种公司

就在大搞特搞quarkus,前一段quarkus的人在twitter上私信我

vert.x中国用户组能不能出个人去交流

我想了下,疫情加上去北京路途遥远,问了一圈,也没人愿意去,算了算了,婉拒了

还是让red hat的人自己去组织了

你看这两个例子就变得没什么用

再比如,visitor模式,这个算是比较复杂的一种了吧

这个在switch的pattern matching得到强化之后,也就变得没用了

具体的例子,我也不想写了,因为要解释visitor模式

switch pattern matching再过一年左右就要正式下发生产了,所以现在这个时间点

费尽力气去解释visitor模式毫无价值和意义

有兴趣的自己看老外的这篇文章

switch的pattern matching增强之后,对比visitor 模式,不仅代码少,而且可读性也要强很多

其他的模式,只要你对java足够熟练的话,应该都能找到比较简洁的写法

所以如果你现在学java,可以不用在这个东西上浪费时间

那些都是古早程序员的经验,没啥用现在

与其浪费时间搞这些,不如把你的jdk升级一下

《重学Java设计模式》第23章:策略模式
746 播放
发布于 2022-05-29 13:55· 427 次播放