JR 精品文章 - 什么是模式
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » 设计及设计模式 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
什么是模式
jeffyan77 原创   更新:2002-12-06 03:23:25  版本: 1.0   

什么是模式,这是一个看上去简单,但是又非常不简单的问题。我见过很多人,学习模式理论已经很长时间了,但是并不真正理解这一点。

模式理论的基本思想其实起源于中国,是中国文化的固有思想。你,我,我们中每一个自幼受到中国思想熏陶的人,都自然具有这一基本思想。模式的思想存在于中国文化的各个角落,包括哲学、法律,医学,兵法,体育,文学,直到我们行为处事的方式。

模式的思想,长期以来不存在于西方思考方式中,至今也不是西方文化的主流思想。因此学习模式,切忌以西方式的思路学习。不然的话,缘木求鱼,事倍功半。

简单地讲,所谓模式,就是得到很好研究的范例。设计模式,就是设计范例。在孙子兵法中,充斥着各种模式。孙子说,“至于死地而后生”,就是战争模式。三十六计,条条都是模式,比如“走为上”,“空城计”也都是战争模式。

这些模式中的每一个都具有典型意义,具有学习价值。通过研究这些模式,学习者可以相互交流,可以在自己的实践中举一反三,推陈出新,加以应用。

在我们参加高考的时候,老师给我们很多的典型题目,作为练习使用。这些题目一般来说不会在高考中原封不动地出现,但是这些题目会有一些内容启发我们的思考,可以让我们举一反三,从而为考试做好准备。

模式不是框架(Framework),也不是过程。模式也不是简单的“问题的解决方案”,因为模式必须是典型问题的解决方案,是可以让学习者举一反三的,有研究价值、有交流价值,有自己的名字的例子。

模式不能套用。不要以为在任何一个系统中都要使用某些设计模式。系统的设计也不是含有设计模式就好,更不是含有越多的设计模式就越好。

在《三国演义》中,马恕就套用了“至于死地而后生”的战争模式,最后倒了大霉。在高考中,你如果把老师交给你的典型题目答案倒背如流,在一个个放到考试卷子上去,放得越多,恐怕你就离考上大学越远。

比如你喜欢三十六计,如果你在执行某项军事任务的时候,千方百计地将尽可能多的三十六计用到里面,每次都来一个“走为上”,那么你的朋友和敌人都会觉得某名奇妙。如果你非三十六计中的计谋不用,或者认为非三十六计中的策略不算好策略,那么别人只能认为你不懂三十六计的精髓。

中国传统医学也是一样,有时看上去症状相似的病,却要使用不同的处方,即所谓辨证用药。如果每次给病人看病,都要捧出某本医案,将尽可能多的著名医案用到你的病人身上,恐怕过不了多久就麻烦大了。

中国古代的法律,就是案例法;也就是需要法官在研习案例的基础之上,举一反三,适当发挥。开个玩笑,如果你喜欢上“轧美案”,逢美必轧,恐怕需要及早做好该行的准备。

关于模式的理论的起源、历史,以及模式理论与中国文化的渊源、哲学思想,设计模式背后的OO设计原则,二十几个设计模式的详细讲解,他们在Java语言中如何实现,如何在自己的系统设计中举一反三、推陈出新,以及Java语言本身使用了什么设计模式,可以看一看我的新书《Java与模式》(电子工业出版社出版)。

阎宏博士
《Java与模式》的作者
javapatterns@yahoo.com
www.WebEndsHere.com


版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     22       6
作者其它文章: 作者全部文章
评论人:kert 发表时间: Mon Dec 09 11:12:55 CST 2002
好!!!!(热烈鼓掌)
------------------
我现在也有点“走为上”的感觉。能否说说如何辨别模式?
另外,何时使用模式?
有时也许模式并不是最优选择(尤其是在项目初期)!如何在“走为上”和“以静制动”之间进行选择?
希望可以深入的论述一下!
评论人:jeffyan77 发表时间: Tue Dec 10 10:58:18 CST 2002
呵呵,模式的辨别要根据它的用意,也就是意图。两个设计模式可能有非常类似的UML图,但是因为背后的意图不同,那么两个设计模式就不相同。
评论人:kert 发表时间: Tue Dec 10 11:26:32 CST 2002
是啊,对于“图”的辨别我觉得是很难的意图。
就像你所谓的风水,或是围棋的图。
如何能准确的辨别出来,或是在多种对策中选择上上之策呢?

我觉得有时不选择也会是上上之策。

抽象出来的图,是很容易被人理解的。
评论人:jjjdqh 发表时间: Mon Dec 16 10:18:18 CST 2002
对模式的分析说得很好,我也认同――模式就是典型案例的解决方案。这个案例它不能在其他的案例中死搬硬套,但是却有举一反三的启发作用,因此作者说得非常好,希望有机会能和博士多交流。
jjjdqh@163.net
评论人:jeffyan77 发表时间: Mon Dec 16 10:20:10 CST 2002
呵呵,应当从OO设计原则出发,而不是从设计模式出发。
评论人:jeffyan77 发表时间: Mon Dec 16 10:32:20 CST 2002
多多切磋  JavaPatterns@hotmail.com
评论人:jjjdqh 发表时间: Tue Dec 17 15:14:00 CST 2002
对模式使用的一点感想
  在大四之前做的程序现在想起来都是小的不能再小的了,依稀记得只有用dos下pascal,c做的一个小型的学籍管理系统和文本编辑系统还能多输入几个英文字母进去,其它的程序就不敢恭维了,所以在大三老师上软件工程课讲的一些概念,感觉云里雾里。
  在大四时参与一个法院的基于J2EE的MIS系统开发,才真正对软件工程的概念有了深入了解(亻可能这些了解也还是片面的,浅薄的),尤其是模式的应用。从需求分析、概要设计、详细设计、编码、测试,每一步走来真的感觉到软件工程设计的伟大(可能是我第一次自己真正接触到这样大的一个系统设计吧)。这里仅谈谈我对模式的一点感想。
  模式设计的思想,我认为就是寻找一个类似实际设计情况的案例,然后把它的思想,方法应用到开发者现实的环境中来。从小处来说,就单个功能模块的程序设计而言,可以是模板(template),从大处来说,就是一个流程(streamline)。所以模式的使用可见非常重要。因为在开发中,没有必要自己再凭空想出一种方法来,那样耗费时间、精力,还有可能最终的结果不满足要求,导致得不偿失。因此可以借鉴别人已经很成熟的案例(比如我们在法院的系统开发中,综合使用MIS和J2EE技术,MIS技术在国内已经很成熟了,而J2EE在国外也是非常流行的)。但是什么东西又不能完全照搬,要有自己的东西,要具体问题具体分析,我就觉得我们的系统开发在这方面做得还不够,加入了很多自己的东西,又不满足客户需求,不吧,又难以实现。这可能也是高校所作横向课题的通病,团队缺乏一种模式的思想。因此软件开发在管理上、开发上都处处有着模式思想的体现。
   我现在进入研究生一年级阶段的学习,对系统设计的思想体会更深,希望有机会和大家多交流。
评论人:flyingwcy 发表时间: Tue Dec 17 17:12:24 CST 2002
模式是一种典型的用例,是启发人们思考,提高工作效率的抽象结果。
也就象语文的写作文,老师拿一篇获奖作文来给大家讲解。至于作文的框架活着里面的句子是否能用到你的系统里,还是要看各个系统自身的特点,根据不同的特点,你可以仿照范例里面的框架或者一些优美的句子。
评论人:efly 发表时间: Tue Dec 17 18:06:57 CST 2002
不掌握好一种面向对象语言的基本特点,使用模式是空谈。所谓模式就是开发者在工作中结合这些语言的特点创造出来能重复使用的结构(不是我说的,我也是看书上这么说的)。掌握模式能提高程序设计的水平,另一方面,有驾御编程语言的能力也能创造模式。

评论人:jeffyan77 发表时间: Wed Dec 18 00:24:10 CST 2002
呵呵,模式理论有得有失,最大的失败之处,就是几乎每一个学习模式的人都有一个自己对模式的定义。

模式是procedure
模式是solution
模式是框架(framework)
模式是关系

模式不是上面的任何一个,这就是我写这篇文章的本意。
评论人:yemao168 发表时间: Wed Dec 25 13:08:19 CST 2002
模式起源于中国

或许,我们可以这样来推论,一切精华的东西均起源于中国,但是...

我想,不是每个中国人会感到高兴的。

-------------------------------

不要这样来损我们自己了,拜托!!!!
评论人:jeffyan77 发表时间: Thu Dec 26 04:12:16 CST 2002
已经有一些朋友这样指出来过了,他们以为这仅仅是作者的牵强附会,因为过去已经有过太多的牵强附会了。

可以这一次不同,这一次确实是真实的。道家被外国人拿去用了,我们自己还捂着耳朵不愿意相信。呵呵,大家切磋
评论人:kert 发表时间: Thu Dec 26 09:22:13 CST 2002
我没有考证过道与模式的关系。但是我相信道家最早阐述过模式理论。
很让人信服的一点是有关风水的理论。也就是算命。
对于算命而言,西方人(尤其实埃及或是吉普赛)也很精于此道。不过它们的方法过于小家子气,通常是根据喝剩下的咖啡渣或是茶叶渣来猜测命运。也有通过玻璃球中模糊的幻影来猜测未来。----只是依赖于简单而有限的几种模式。
而古代中国人总结出来无数种模式,并且把它提升到某种理论高度。(就像Alexander做的那样)

  1. 《易经》是一本从理论上指导如何通过识别各种各样的模式而推算出命运的著作。

  2. 中国人把这种活动称之为命,不是一般的猜测,而是计算。



呵呵,一些废话,玩笑玩笑!

评论人:jeffyan77 发表时间: Fri Dec 27 08:31:09 CST 2002
呵呵,这个么要从哲学谈起:-)。

什么是哲学?哲学不能提供数据。您把自己公司的销售数据下载到软盘里面,那软盘里面的就是数据。这些数据与哲学无关。

哲学不能提供知识。什么是知识?从数据中提炼出来的,针对一个问题的答案,就是知识。您在软盘里面通过运算,给出的诸如什么产品畅销,哪一个销售人员业绩最好,就是知识。明年什么产品畅销,也是知识。这些知识与哲学无关。

哲学提供给人们的,是思考问题的思路。那些试图给出数据、知识的理论,不是哲学。

道家哲学迷失在大量的神秘主义中间,已经很长时间了。Christopher Alexander理论被人评价为20世纪最伟大的理论之一,所作的工作其实不过就是将道家从神秘主义中解脱出来而已。
评论人:hudiefei 发表时间: Tue Apr 15 09:05:31 CST 2003
为什么要说精华的思想都是中国的呢
我不认为C++或者java之父知道什么道德经,南华经的内容
为什么要有OO,因为开发软件的需要,为什么要有模式,因为开发软件的需要
那些创新者的哲学是现有的技术不够用了,怎么办呢,我就造一个技术满足这个需要!
而后面的人呢按着自己的background看出这个看出那个,各种各样的东西都要往上面套
我一直以为这就是中国人真正悲哀的思维方式,也是导致无法创新的根源
是啊,都是中国的精华,那么那么多伟大的科学技术领域的发明都是外国人拿中国人的思想罗?
恕我无知,我想知道就java技术而论,多少概念是中国人提出来的?为什么要那么不踏实而迷失在所谓的“看起来很好很高深”的辩论中


评论人:qizhengut 发表时间: Wed Apr 30 10:42:40 CST 2003
有点矛盾!不知道对不对?
评论人:frannie 发表时间: Wed Apr 30 21:19:54 CST 2003
应该说模式是不同与frame的吧
一般我们用的frame感觉是可以照着搬的,更多的作用在一个系统
而模式更广泛
评论人:lwfsharp 发表时间: Wed Jul 30 16:41:11 CST 2003
模式是典型案例,模式的利用不可以生搬硬套,应该举一反三,针对具体问题设计解决方案。
评论人:lwfsharp 发表时间: Wed Jul 30 17:31:57 CST 2003
hudiefei的评论发人深省啊,赞!
评论人:jeffyan77 发表时间: Wed Aug 06 02:03:01 CST 2003

在我提出Alexander理论与道家思想的关联这个问题之后,有了很多的反响。我很感谢大家的评论,我的本意也就是希望能够引起大家的关注。

只是很遗憾的是,评论的人很多,无论赞成还是反对,都很少有人读过Alexander的书(我怀疑一个都没有)。换言之,评论我的观点的人没有做过基本的调查研究。很多人把我的观点确定为“中华本位思想”,也就是说,所有的好东西都源自于中国文化这一思想。这不是我的观点,说得很多了,我也懒得反驳了。不过喜欢我的观点的人,有相当的成分可能有这个倾向,所以我也不愿意轻易赞同。

正因为如此,我也一直没有再参与讨论。大家自说自话,多么没有意义。

请你先读一读Alexander的书,然后再说我是不是中华本位主义。


《Java与模式》作者
阎宏
游客: ?¤?????????????°?? 发表时间: Fri Apr 16 00:04:05 CST 2004
一个物理学的博士,没有扎实的计算机功底,跑到这里来冒充模式大师,实在好笑。说了这么一大篇却没说清楚模式到底是什么,大作想来也没必要拜读了。
所谓模式,就是得到很好研究的范例。
这话完全不对。
什么是模式?象棋里面的“当头炮马来罩”就是模式,“马后炮”就是模式。围棋里面的“立二拆三”就是模式,“金鸡独立”就是模式。
中盘的精彩一招可以是得到很好研究的范例,却不是模式。
范例是可以学习的,但不可以应用。
模式是可以应用的。
评论人:wangcunjiang 发表时间: Tue Apr 20 23:06:28 CST 2004
博士讲的很好,感觉很牛
评论人:jamesxiao 发表时间: Sat Jul 03 00:25:37 CST 2004
   听了各位的精彩对话,感到学习到很多东西,谢谢!
评论人:laonongfu 发表时间: Mon Apr 14 21:41:31 CST 2008
好东西哦!
评论人:greate27 发表时间: Tue Jul 08 07:47:04 CST 2008
不错!
[good]

这个文章共有 25 条评论
主题: 我的《java与模式》读书笔记:) 上一篇文章
返回文章列表 返回〔设计及设计模式〕
下一篇文章 主题: 简单工厂模式的一个排序实例


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号