如何学习和理解设计模式?
——对任何事物或原理的研究和学习,一定要始终记住一个要点:只有思维先进入这一层,也就是在大脑里形成分析该问题的上下文环境,在这个基础上,然后再用想关的思维方式考虑问题,才是清晰的,才是正确的。尤其是对深层原理和技术,必须是这样。
好的。回到设计模式的话题上,无疑的,设计模式应该说是面向对象程序设计中较高层也较深入的研究方向了。我们先理解什么是模式和设计模式,这里,好像也并没有一个统一说明该术语的解释,但是我觉得《设计模式》一书中的这一句就可以了:
Christopher Alexander说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”[AIS+77,第10页]。尽管Alexander所指的是城市和建筑模式,但他的思想也同样适用于面向对象设计模式,只是在面向对象的解决方案里,我们用对象和接口代替了墙壁和门窗。两类模式的核心都在于提供了相关问题的解决方案。
这一句,首先从建筑的角度阐述了模式的概念,模式本身说明了我们周围无数问题之间都充满的共性,而将这引入面向对象程序设计领域,自然也充满了相同的地方,发现这些方案的核心并提炼出其中的架构,就是我们通俗讲的设计模式。
知其然,那又如何理解和学习其所以然呢?
要记住,设计模式是建立在面向对象基础上,用于解决类和对象的设计和之间相互通信的技术。所以当学习和理解设计模式时,首先我们面对和考虑的问题域应该已经是类和对象了,而不是对现实问题或世界的建模或者别的什么,不然我们很可能就会坠入永无天日的深渊!
而明白了这个关键的要素,下面的进展就是水到渠成了。利用设计模式这些有效的方案和架构,帮助我们分解合适的对象,控制对象的粒度,指定对象的接口,最后到描述对象的实现,多加研究和练习,我们就能很好的运用设计模式设计出架构清晰,可复用性好的程序了。
总结:本篇文章全是思想层面的讲述,文字简短但是其中有的意思是很深刻的,可能需要在不断的学习和实践中加深理解。但是最关键的,也是突破最大障碍的银弹是上文说过的一句话,此处再着重强调:
对任何事物或原理的研究和学习,一定要始终记住一个要点:只有思维先进入这一层,也就是在大脑里形成分析该问题的上下文环境,在这个基础上,然后再用想关的思维方式考虑问题,才是清晰的,才是正确的。尤其是对深层原理和技术,必须是这样。