Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Design Pattern & UML  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 Design Patterns偶得
cosmoschen





发贴: 1
积分: 0
于 2004-02-04 15:29 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
劣者从知道Design Patterns也好一阵子了,买了几本书,翻了一遍,也跟着做了几个整理,不过总觉得摸不着核心,便停下来学习别的,最近发下志愿重头再看一遍,忽然有些新的体会,在这里分享给大家,重点在于「学习」的过程,而不是学习的内容,内容就在几本经典的书上,包括:

GoF Design Patterns
Design Patterns Explained
Design Patterns Java Workbook
当然,还有阎博士的书

过程很简单,我先是看了GoF的Design Patterns,把23个Patterns的「名称、理念、应用时机」大致了解,对我而言,这本书的价值在于参考,书中把实作的时机、变型、延伸、关联解释的十分清楚,是实作时拿来参考的主要依据。

接着进入Design Patterns Explained,主要在简化Patterns理念、由来及介绍一些最基本的应用概念,书中用Java为主要范例,所以读起来在架构上很简明,他并没有把所有的Patterns都做介绍,不过很重要的是他带出了Design Patterns的应用之一在「解决因不良设计导致的问题」,这点启发了我:当现有程序在历经改变及新需求时,在这个时候才试着导入Design Patterns来让工作变的更好?初学Design Patterns,老想着在设计新程序时便急着应用,这就像你拿了把铁锤,就把所有东西都想成是钉子,急着想敲敲看,结果很可能是不幸的发现,自己并没有办法掌握的很好,所以就产生极大的挫折。

在这里举个例子:我设计了一个Data Access Object Interface用来封装一些基础的DB操作,同时在里面实作Connection Pool的机制,这个接口有Oracle和MS SQL的实作,后来也陆续加入了许多不同DB的实作版本,最近开发的程序需要转换DB,在设计上我换DAO的实作即可,程序正常,不过却遇到一个问题:不同DB里面的资料无法很容易的Migrate。

这时我便想到Design Patterns了,利用Factory Method做一个产生DAO的Factory,接着包装一个Mediator做为资料型别的中介转换Utility,大致上的做法如下:
DAOInterface DB1 = DAOFactory(DAOInterface dao);
DAOInterface DB2 = DAOFactory(DAOInterface dao);
Utility.migrate(DB1, DB2);
这个Migrate方法会自动在DAO中寻各自对应的型别,然后进行适当的DB Table创建及型别转换工作,最后,再利用两个DAOInterface把资料写入即可。

或许这不是个好例子,但对我的意义而言,原本要手动整理资料型别对应,逐步下SQL指令做Migrate的动作,现在可以适当的「封装」成为一个可以再用的Mediator类别,这也是书上说的另一个重点:「什么时候应该适当的使用封装,什么时候又要使用抽象让工作简化」。

一直到这个时候,都还感觉不到Design Patterns的威力,最近看了Design Patterns Java Workbook,才有忽然间「通透」的启发,这本书运用了很不同的分类方式,把Design Patterns依「相似性」做了分类,程序出身的我,在这里看到了更多的可能性:「模式的分类也是一种抽象」,这句话可能跟GoF的Bridge Pattern一样难懂,在这里解释一下:Design Patterns Java Workbook里第一篇把Adapter、Facade、Composite、Bridge等Pattern结合为接口模式,接口大家都了解,把你想要的使用方式预先做适当的规范,接着便可以依照不同的场合,选择不同的实作版本来应付变化。所以当你想要结合「两种」不同的操作接口,你可以试试Adapter或Facade,更进一步来说,当你要结合像讨论群组与讨论标题这两种不同的接口,便可以试试Composite或Bridge,不同的是,Composite在于提取出相同的操作接口,而Bridge在于让两种接口可以各自发展出特有的行为模式,但又保持适切的关系。

所以从程序的角度来看,对象间彼此的「关联」与「责任」才是Design Patterns讨论的重点,一样是A Class呼叫B Class,我们可以利用Adapter把呼叫B Class的动作变成呼叫C或D Class;运用Facade把呼叫B Class变成是整体操作的一环……到此,我开始从范例程序代码的牢宠中解脱,真真正正的去看多个对象间,彼此互动的关系可能有哪些变化,以Observer Pattern来说,我可以把变动的责任下放到个别的Class之中;也可以应用Mediator Pattern把相关的变动封装成为一个专属的Class里面,重点在于:哪一个选择比较适合现在的状况。

到了这里,再看阎博士的书就变的十分有趣了,他把中国古代经典里面的许多精神与范例拿来解说,运用我们已知的知识,除了可以更清楚的掌握每个Pattern的要义,同时也能更进一步的发想出更多创意,至于那些范例,更是一个练习的好地方,因为实务上没有人会叫你去设计红楼梦里的行酒令,但如果你认真的去思考,这些就是Design Patterns的真正目的:可再用的设计理念。

后记:这是野人献曝,提供的也仅仅只是个人的观点,从一开始由类别图「强记」各种Patterns的型式,到后续的分析彼此变化关联,到现在从更哲学的观点看Design Patterns,才明白原来写程序也可以这么人性,这么深沉,笔者来自台湾,用字上的不同之处,请多包涵,有任何意见也欢迎与我一同讨论。



作者 Re:Design Patterns偶得 [Re:cosmoschen]
jigsaw

KK

CJSDN高级会员


发贴: 804
积分: 93
于 2004-02-06 11:14 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
写得不错 鼓励原创


No one knows except both of us.
909090909090909090909090909090909090909090b8533ce76c8d6c241868968a0408c338b4ffbf
ISO/IEC 9899:1999
作者 Re:Design Patterns偶得 [Re:cosmoschen]
mochow

Mary有只小山羊咿呀咿



发贴: 339
积分: 40
于 2004-03-17 11:35 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不错,支持啊!


不管命运的手如何沉重,不管人如何执迷于虚妄,不管皱纹怎样犁着前额,不管心里充满几多创伤;不管你在忍受怎样的残酷的忧患,但只要你碰到了初春的和煦的风,这一切岂不都随风飘去?
我的blog:http://mochow.tianyablog.com
作者 Re:Design Patterns偶得 [Re:mochow]
heaven



CJSDN高级会员


发贴: 185
积分: 51
于 2004-03-17 12:02 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
很好的文章,收藏之


别拿感情的事问我,自己的感情要自己体会
作者 Re:Design Patterns偶得 [Re:cosmoschen]
Geminist





发贴: 45
积分: 50
于 2004-06-03 21:12 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我觉得先看design patterns explained
然后是gof



作者 Re:Design Patterns偶得 [Re:cosmoschen]
Rainwolf





发贴: 107
积分: 30
于 2004-06-15 17:11 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
本人认为《设计模式》只需要看2~3次,只需力求对各种设计模式了解透彻,不需要事事照搬,然后就开始冥想吧。

所谓的冥想就是自己从自己对软件设计的体会出发,整理《设计模式》中的各种典型模式,从它们的目的,特点,相似性,优缺点等角度进行考虑,结合软件设计发展的历史,各位大师的软件设计哲学,甚至去考虑设计模式所能与所不能的领域,再辅以自己的项目经验,成功的和失败的,勾画勾画,感悟感悟,也许你会得到属于自己的创新。

冥想很象做白日梦,其实能作白日梦是一种能耐,在清醒和混沌中迷离,可能不经意就捕捉到了创新的光芒

本人就如此长期冥想得到一套想法,正在付诸实现... ...



作者 Re:Design Patterns偶得 [Re:cosmoschen]
littledeer1974

Garbage Collector

CJSDN高级会员


发贴: 963
积分: 122
于 2004-09-10 09:49 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
虽说我现在还在学习中,但也感觉到这篇文章的要点,很感谢作者,希望以后能有类似的文章和大家共享
次外,我想询问各位,大家所说的阎博士的书,我在哪里可以得到呢,因为我不在国内,也没有办法去书店购买,大家有什么建议吗



Surround yourself with people who are open to change

作者 Re:Design Patterns偶得 [Re:cosmoschen]
zyzhang

Explorer



发贴: 155
积分: 30
于 2004-09-10 17:51 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Recently, i read the book "Design Patterns JAVA Workbook". It's actually a very good and useful book to help you understand the idea(spirit, not just the structure) behind each pattern, and the questions can encourage you to give deep thinking on the pattern, even though i don't like the "firework" examples through the book.


作者 Re:Design Patterns偶得 [Re:cosmoschen]
主管





发贴: 448
积分: 100
于 2004-11-05 16:51 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
是需要走弯路思考再走弯路思考的过程的



flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2018 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号
客服电话 0592-8750026    客服信箱 714923@qq.com    客服QQ 714923