2008-01-09

漫谈“设计模式”

关键字: 设计模式 jdk
对我来说,经典设计模式提到的23种都能读懂,但能真正领会只有一半左右,深入研究并烂熟于心的就7,8种。

对java语言来说,Prototype模式实际上是没有意义的,可以忽略。

和所有知识一样,不能生硬地去死背23种设计模式,但只要编程时用心思考,其实设计模式就像氧气一样自然弥漫在你的周围。

看看,JDK的API中就有很多设计模式在体现:
Iterator(迭代器,没有这东西怎么来遍历千奇百怪的Map,List啊),
InputStream(装饰器,IO包是伟大的设计,伟大就在于decorator模式),
java.lang.reflect.Proxy(动态代理模式,没有这个Spring的AOP就歇菜了),
java.util.Observer(观察者模式,如果你做Swing,不知道这个模式简直是要人怀疑你的智商),
java.security.KeyStore.Builder(Builder模式)
java.security.KeyFactory(工厂模式,这两个模式反映了在加密策略多变又需要统一的情况下应该怎么处理)
——最近在研究加密,所以相关领域了解比较多。
Serlvet(模板模式,还记得init,destory,service方法吗,定义好了servlet执行的流程才能让你写doGet;还有BaseController...),
个人能力不足,在JDK中暂时只能想到这么多,细节太多我不想解释——只要用心看源代码和google,反正我就是这么过来的。

在不同的问题领域,会催生出不同的设计模式和其变种,可以看出在JDK这样的底层API中大多数是创建型的设计模式在起作用,因为它们需要生成复杂对象。而在Web开发领域,远程通讯,文件处理等等各种场合还有很多经典模式在起作用,例如Strategy,外观,命令模式等等,更多的则是多种设计模式叠加的复合模式,例如MVC。
运用之妙,存乎一心,不可能一蹴而就。
还是那句话:慢慢来,其实我也不懂。

2008-1-18补记:
今天想起来,java.util.File.listFiles(FileFilter filter)方法应该算是策略模式了。又是一个可以用闭包杀死的模式。
评论
fish2007 2008-01-18
编辑器好像不太智能啊
fish2007 2008-01-18
模式,在平时的不知不觉中就用到了。当回头去看书时,才恍然大悟,原来早就有现成的东西了。

看了一本书,讲的晦涩难懂,也许是翻译的不好吧,最近在网上四处寻找关于模式的资料,争取能慢慢的领会其中奥妙。
binshanf 2008-01-16
我们用模式不是因为用而用,而是为了解决时间问题、使代码变得更加容易维护,如果一个问题在没有应用设计模式会更简单,在用设计模式岂不是画蛇添足。适得其反
tedeyang 2008-01-10

我也有错
lyazure 2008-01-10
不好意思,因为最近刚好对prototype模式有些小体会,所以看到你说prototype没意义就直接回了句,回头再看觉得语气好冲,评论又改不了
tedeyang 2008-01-09
复读一遍这篇文章,感觉我的语气太自大了。
真是很
青蛙在井里时间长了就会变成这样不可理喻, 而且这篇文章本来是和同一个井里的青蛙们一同讨论的。
看客还请多多包含。
tedeyang 2008-01-09
to:lyazure
你这样下论断也太武断了吧。

正是因为Object就含有clone方法,所以我才说原型模式没有意义——事情已经简化到只需要一个方法了,再来谈设计模式就是画蛇添足。(希望不要再以为我不知道clone的浅层拷贝特性,《Thinking in Java》的附录我仔细看过)

另外,都是从C学过来的,难道能连指针都搞不清楚吗!
cljspn 2008-01-09
哈哈,学习、应用中。
lyazure 2008-01-09
你不理解prototype模式,不了解clone方法,甚至有可能对引用和对象在java中的使用都没弄透
发表评论

您还没有登录,请登录后发表评论

tedeyang
搜索本博客
最近加入圈子
最新评论