给你们看一段有意思的代码,就一行代码,实现了设计模式中的单例。
objectConfig上面是用Scala语言实现的,也即是单例模式,在Scala就是一个特性而已,毕竟单例模式原本想表达的意思是:
整个系统只有一个实例。
但是在java里想实现这个,就得好几行代码了,如下:
publicclassConfig{privatestaticfinalConfigINSTANCE=newConfig();privateConfig(){}publicstaticConfiggetInstance(){returnINSTANCE;}}这个跟java这门语言的设计有关,当时设计这门语言的java之父,对程序员是持悲观态度的,他不想给程序员太多的权利,因此把语言设计的严谨安全,这个就会导致语言的表达力受损。
所以你才会看到,只要是用java实现的,不管是业务项目,开源框架,都在用设计模式。
那设计模式本身有问题吗?
完全没有问题的。
它只是一种解决某个问题的模式而已,比如:
- Factory,真正解决的是对象创建和对象使用解耦。
- Strategy,真正解决的是行为可以自由替换。
- Observer,真正解决的是发布者不用关心订阅者。
所以日常开发中,你应该先搞清楚要解决的问题是什么,是否可以用一下设计模式。
仅此而已。
假设你认为这个时候全局需要单实例,如果用的是java语言,那就老老实实写那十几行代码,除非后续java把单例作为一个语言特性。
而如果用的是scala,那就一行代码就够了。
至于有人在喷设计模式的,理由无非就是:
- 确实存在跟风的问题,用设计模式进行过度设计;
- 而java本身语言设计的问题,又导致必须写很多的代码来完成这个设计模式,导致代码里充斥着这种不太容易看懂的代码;
- 程序员功力不够,不知道何时用设计模式,何时不用。
这个跟设计模式没有任何关系,别往它身上扯。是使用的人滥用而已。