最近有空又重新看了一遍《Head First 设计模式》,孔子曰“温故而知新”,诚不欺我也。虽然在大学时已经看过这本书,但工作两三年后重新看回来还是获益良多。不仅弄明白了很多以前一知半解的东西,而且对于很多模式都能够在项目工程中找到实例,了解了其设计意图以及优缺点,很有拨云见日的感觉。
现有的设计模式很多,最经典的有24个,他们有的很相似,有的南辕北辙,各有各的优缺点,各有各的适用范围。通过三篇文章来把他们归类、梳理并逐一介绍:
通过以上的文章我们看了那么多的模式,我们肯定会有所思考。设计模式到底是什么?设计模式用来干什么的?
讨论这个问题之前我们先扯点别的,谈谈武学。任何一个手脚健全的人,都会用拳头去打,用脚去踢,但仅仅这样肯定称不上“高手”,甚至连入流都不算。想成为高手我们得学习武功,武功套路就是前人记录的一些习武经验,内功这种离我们现实有点远的不说,外功招式就是遇到别人左手直拳,该怎么挡隔,可以怎么躲闪,然后可以怎么反击等。说白了就是告诉你,外面的世界通常会有什么样的情况,然后面对这些情况你可以怎么样的处理。
再来看武功套路,有一些武功套路谁都会,例如太祖长拳,有一些武功套路几近绝迹江湖,例如九阴真经,葵花宝典等。但谁都会的武功是不是就没啥用呢?而绝迹江湖的武功生搬硬套是不是就能成为高手呢?金庸老先生用一出聚贤庄上乔峰太祖长拳战玄难少林绝技告诉了我们答案。对于武功可能有简单复杂之分,但高低之分在于运用的人。能根据不同情况灵活运用不同招式应敌,就可以称得上“高手”了。
站在高手的行列,再往上看就会发现,真正的“高人”已经不再拘泥于一招一式了。无论是周伯通的左右互搏各种武功随意混搭,还是独孤求败、风清扬的独孤九剑无招胜有招,都共同诠释了这样一个道理。真正的“高人”出手已经没有招式的概念了,却处处符合武学之道,从容应对所有挑战。
再回过头来看设计模式,设计模式就是程序员的武功套路,就是前人在面对许许多多软件开发挑战时总结出来的经验,而我们学习设计模式就是学习武功套路的过程。最开始我们见识了这些模式,看到他们怎么工作,对应解决什么问题,接着我们在遇到相同的问题时可以应用这些模式,解决对应的难题,这时我们就算是入门了。但是,想要成为高手,我们必须得透彻的理解这些模式,将它们不拘一格得灵活运用到实际情况中。最后我们的终极目标就是如同传说中的武林高人,忘记这些所谓的模式,设计实现中没有模式的痕迹却能符合软件开发之道。
所以其实四人帮总结的这24个设计模式,有些可能依旧闪光,有些却已经过时了,同一个模式可能在某些情况下运用浑然天成,但可能在某些情况下就是过度设计了。不要盲目的否定设计模式,也不要盲目的崇拜设计模式。不过无论如何,只要我们坚持学习、坚持实践、总结经验,我们就走在成为高手的道路上了。