您的位置:首页 > 其它

模式学习历程--从书到李建忠老师的23模式讲座

2008-06-10 15:47 393 查看
花了足足两个月的时间终于认真的听完了李建忠老师(请充许我这么尊敬的这么称呼它)C# 设计模式纵横谈的讲座。

觉得思想上受到的触动和那一段时间读BOB大叔的敏捷开发的感觉一样。思想有一个重新升华的过程。

开始学习模式的时候和很多人一样也是购买了四人帮的GOF那本圣典,反复阅读,但是到后来也只是明白了有这么23个模式存在,那时候能真正使用和理解的也就是创建型的最简单的模式Singleton。后来和网友在聊天,提到了他正在看的阎宏的Java与模式那本大砖头,之前也听过那本书,可是却没买过,网上的反映很平,没有太多出彩之处。但是那时候就象掉到水里的人一样,抓到草也要死劲拉。于是买了回来,细细的捧着砖头认真的阅读。整篇读完后,收获很少,只是说比读GOF的书更是明白了,为什么这个模式叫这个名字,至于怎么运用,为什么要使用。仍然是一头雾水。这时候BOB大叔的敏捷软件开发的书中译本出来了,网上评价说译的很好,同时Matrin Flow大师的重构的中译本也出了,于是马上都一起买了回来。

当时,觉得还是先读敏捷软件开发,花了长时间很认真的读完了BOB大叔的书,并把BOB大叔提到的五条面向对象开发的原则:

单一职责原则SRP:Single Responsibility Principle

开放封闭原则OCP:Open-Close Principle

Liskov替换原则LSP:Liskov Substitution Principle

依赖倒置原则DIP:Dependency Invertion Principle

接口隔离原则ISP:Interface Separate Principle

打印出来,贴到自己的电脑上,没事就看看。。

BOB大叔没有讲解太多的模式,但是他的书里字里行间所述的都是一些让你终身受益的思想。

就那个COPY的例子,你通体认真阅读也是受益非浅。

BOB大叔的书读完后,感觉思想很混沌,有一种冲动一直在心里奔动。却无法说出到底是为什么。实际项目去运用书上所学,却也是不是太得要领,最后仍然会回到老路上。

BOB大叔的书看完后,接着看了重构。。这时思路才慢慢清晰起来,回想着BOB大叔书中所讲的一些经验和5大原则。

让我渐渐的明白,重构并不是无用生有来的,也并不是对代码的重新整理。他是前人经验的结晶,与模式有着异曲同工效果。模式就是运用5大原则和开发的一些经验最后通过重构得到的一种结果。这些话你从书上看到和你自己总结出来,完全是两种不同的成长历程。

一次偶然的,发现微软的WEBcast上有李建忠讲解的设计模式,出于对翻译<.net框架程序设计>那本书的敬意,于是下载了第一篇,工厂模式的讲课,一听之下,感觉受益良多,马上下载了完整的23个讲座。

他在讲课中并不象很多书中一样,把这个23个模式来一个讲解,举个例子,阎宏的JAVA与模式中讲解装饰模式是这样说的:

他说孙悟空,有72种变化,但是每一种变化其时只是个装饰,实体仍然是孙悟空。这些详细的就不说了,还引经具典,但是最后让人明白的也不过是说,装饰模式是个什么样的模式,至于这个模式的意图却并没有很清晰的说出来,虽然他后面也提到了模式运用的场景,可是却是言之无物,读者也没办法去真正的应用模式(各位不要拍砖,也许是各人的看法不一样)。

而我们听李建忠讲解的模式课程中,却不是这样讲解的,第一:他强调的是模式是如何来的,第二为什么要使用模式,第三不用模式和运用了模式的代码存在什么区别。第四:模式的核心思想是什么。他是让你带着这些问题去听课的。他并不是教你什么样的代码才叫装饰模式,什么样的类图才叫装饰模式。而且他很明白的告诉听众,GOF23模式中的那些代码和UML类图都并不规范。符合他的模式的意图的都可以叫模式。他在课程中反复提到的一句话:就是隔离变化。这句话我觉得才是模式的重点,也是重构的目标。如果大家有认真的思考过,有丰富的项目经验都应该能深刻的体会到这句话的含意,这才是现在模式的精髓。如何隔离变化,那么5大原则可以给你指导。在这5大原则的指导下,运用重构你就可以得到模式。厄,回到主题上,那么李建忠老师是如何讲解的呢?首先,他给出了这个模式需要应用的场景需求,也就是说在什么地方你需要运用到这个模式,他会给你带什么样的好处。当然这个只是语言上的。然后他会给出GOF中的关于这个模式的意图。

在他反复的强调了:隔离变化和在动态中看模式的运用这些他重复一千遍的话后,他会给你举一个简单的实例。当然他先给你的就是一个没有模式的情况。然后他在通过一个简单的重构(不能这么说,因为他没有过程,是直接运用上了,由于讲课的时间关系)让你很清楚的了解有模式的和没模式的区别,其中他强调的最多的就是,为什么他要这么做,要引入这个模式,他解决的是个什么问题,在那些变化的情况下,要引入这个模式。而那些情况你不需要模式。虽然他举的例子是很小的,可是他仍然努力的让你感受到他是如何去隔离变化,去如何的应对变化。他给你的中心思想是:隔离变化。。。

这是很多书上强调的,也是努力的去呈现给读者的,比如设计模式解析等好多书的目的。但是我个人认为,李建忠老师这些讲座非常精彩的在现了这些。

我带着这些思想又重读了BOB大叔的敏捷软件开发,这里是我之后的一个体会

关于那个COPY程序。BOB大叔给了我两个不同的版本,一个是面向过程,一个是面向对象的。其时例子非常简单,

开始第一次读的时候,我始终只是知道后一个版本比第一个版本好,至于为什么,心里机械的回答,因为第二个更好的支持扩展。。

第二次在看的时候,已经完全是另一种感受了。第二个版本,完全的倒置了依赖关系。他为什么要倒置依赖关系。因为他要隔离变化,那么那里有变化??就是COPY这个地方,而李建忠老师讲的一句我觉得更加深了我的理解:“那里有变化,就封装那里,在变化和不变化之间形成一个隔离。这样就封装了变化,隔离了变化”。我个人认为这些话真的非常精准的说出了模式的精髓。细细的体会这些话,你就可以很好的了解模式的应用。带着这些理解,你在回头去看设计模式的时候,就会觉得有一种水到渠成的感觉。面对设计模式设定的应用场景,你就能自然的了解这个模式为什么会产生,他是如何是解决这个设定场景中存在的问题的。。

心有感慨而发,如有不当和不好之处,望各位手下留情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: