设计模式三重天[之三]

写作背景:

        一直在看关于设计模式的书并不断的实际工作中努力实践,同时也看到了播客园上设计模式
团队文章热火朝天的研究和讨论。心里非常高兴,在国内设计模式的研究和使用还不是很丰富和
完善的今天,这种讨论无疑会对每个园中的个体还是播客园整体实体的提升有着重大的意义,我
非常希望以后想研究.NET程序的人只要知道两个网址就能完成工作中90% 的知识查询,一个是微
软的MSDN,一个就是播客园。

        注:本文不是专门研究某一种设计模式,而是从全局出发,通过本人将近 1年半的学习和研
究设计模式后形成的一些个人观点在这里进行一下阐述,因为个人的能力有限,这里只是希望与
大家交流设计模式的学习心得,如果有些观点与您的相似或不同,欢迎大家与我联系。如某些观
点让某些人不舒服,欢迎拍砖。

        接上文..

        第三重: [无模式]

         这里我说的无模式,不是当“压根就没有模式”讲。相反,这是一个无穷量,就像我们在大
学时使用的Limit 极限一样。这一层面上永远没有终点,一切只是像坐标轴一样,只有原点,没
有终点。另外,当年张三丰教张无忌太极拳时对张无忌说的,什么时候全忘了,什么时候就全会
了。因为只有满足了应用需求的软件才是好软件,而使用什么设计模式,那是只有程序员才关心
的事。
        当你在设计中遇到了问题,在多年经验的基础上,写出了高度可扩展,灵活,效率高,BUG
极少的软件时,而此时设计模式只是被无形中应用于开发过程里。这时你会不知不觉就使用了设
计模式中的思想和好处,而这一切只是基于你的开发习惯,也许只有到这一步才是真正的“融会
贯通”了。

         向这这一段转型的前提是你无数次不断的实际和思考以往的设计,同时应多看看别人的成果,
特别是多看一些开源的大项目,至少我知道像 spring,structs,hibernate, castle等,其实但凡大的应
用程序框架都会使用设计模式。看一下别人的应用和观点,也是加速自己成功的催化剂。如果没
太多的时间也可以先从几个简单的模式入手,不断重复第一和第二重模式,直到成精。因为设计
模式之前是有着一定关联的,只要能做到触类旁通也不失为一种成功。

        举个例子,令狐冲大侠在一开始学习独孤九剑时也只是“破剑式”用的还勉强让风清杨看得
过去,原因就是因为令狐冲在华山时学的就是剑。专业如此,自然学习了要快一些,但是当后来
跟封不平,任我行对剑时,剑法越来越好,原因就是不断练习外加天资过人,所谓“触类旁通”
不过如此。有时我在想,金庸先生也许更适合做程序员,因为他所说的独孤九剑的模式非常像是
设计模式上的思想。

        现在独孤九剑要旨发布于此,以博大家一笑
        独孤九剑,有进无退!招招都是进攻,攻敌之不得不守。虽只一剑一式,却是变化无
穷,学到後来,前後式融会贯通,更是威力大增,剑法的精要所在:「料敌机先」。

        而这最后一句“料敌机先”,就像我们在设计系统时做需求一样,如果能最大程度知道需求,
完全可以做了先知。(本人无意在客户当前敌人)

        这一篇有点八卦了:),希望大家见谅。

        现在把我本人在学习设计模式时所感所悟发表于此,希望大家多多交流:

       1 设计模式与应用框架的关系。
        一开始看到大型框架是ACE,是一个在国外有十多年开发历史,时间上可以LINUX同日而语
的应用程序网络通信框架,原作者是Doug Schmidt,中文译者是马维达[翻译水平直追候捷]。
ACE就是 adapter communication envirment 适配器通信环境。只不过它使用的开始语言是c++,但是里
面的设计模式使用思想绝对是当时非常先进的。它用的模式有bridge,facade,Abstract factory ,
Templete method,Adapter 等等,正是由于模式的使用,使系统能够轻而易举的进行网络开发。即
使有什么需求变量,也只是改写很少的代码(有时仅一行)即可。框架是学习设计模式不能再好
的参考了,因为这是经过千捶百炼的代码。
 
       2 不要为了设计模式而使用设计模式[避免设计过度]。

       3 设计模式在使用时要有使用的背景,如不清楚要参考四人帮的模式设计意图。

       4 不同的人有不同的解决问题的方法,因为模式的使用与要解决的问题本质上是N:N的关系。
       只要能优雅的解决问题,那个设计模式用的就是对的,这就是我的观点。如果别人用了与
我不同的模式也不要紧,因为条条大路通罗马。同时模式也不是只能运用于某一特点场景,不用
抹杀它的通用性,因为在四人帮出的那本书中,也是用尽可能抽象和清晰的语方来阐述设计意思
的。而不是说只能用于某特点场合,如银行结算,计费统计,财务报表等。

     5 模式的本质是要让你程序中的不变部分去藕合用户经常变化的需求。

     6 模式也在不断发展和变化。
        比如说眼下比较热的像AOP,IOC,依赖注入等,其设计主旨或多或少都有些设计模式上的
影子。当我们熟悉了那23种模式后,再来看这个东西,你肯定会有似曾相识的感觉,原因就在于
模式的不断发展和变化。
              
        侃的够多了,到此为止了,对不住大家的眼睛了:)。

全文完。。。

posted @ 2006-03-17 13:07  代震军  阅读(2296)  评论(3编辑  收藏  举报