最近看一本书,里面再一次提到了synchronized关键字的原理。然而我看着看着,突然产生了一些其他的联想。synchronized关键字之前一直知道原理和作用,以及使用场景。就是在线程执行时加锁,锁是谁?锁是this。java的this嘛,就是当前Object在运行时的instance,如果是静态方法,那锁是Class对象。
我突然发现,this这个词用的真的是太精准了,我还特地想了很久,想想看,用除this之外什么语言和词汇来描述这个场景,想来想去,都没有this精准。因为this代表了当前对象在线程执行时实例,一个词就可以说明锁谁了。this是java语言里面的关键字,这是典型的站在问题域的视角上描述问题。
由此,我联想到设计模式。之前看设计模式,只知其然,或许也知其所以然,但始终不得感性上的认识。总是感觉,设计模式,虽然能解决问题,但有点罗嗦,一堆接口和类,来组成这个设计模式。现在我站在它解决的问题域的角度上来看它时,发现,它成为这个结构和形状,就是为了它解决的问题,而形成的。设计模式的目标是解耦、是复用、是扩展。它的六大原则里面也从各方面来说明,遵循这些原则,就设计出符合设计模式目标的软件结构来。我从设计模式目标的视角出发,去思考设计模式的构成和特征,我发现:各种模式被定义为这种结构,几个类和接口,各司其职,不是为了给人看的,是为了完成设计模式的目标,是为了让程序的扩展和维护更方便。从这个视角出发,再回顾自己过去用设计模式及其原则做出的系统,终于有了一种,设计模式,确实能降低复杂度。
我发现,当我们看待问题时,需要站在问题的角度去描述问题和找解决方案,而不能站在自己的角度上去描述问题,想当然的通过自己的思维,去解释为什么会这样,为什么会那样。这看上去是个理所当然的结论,但我用了好久,才从感性上去认识这个道理。