JiveJdon Community Forums
在线248人   首页   主题表   培训咨询   标签   查搜   注册    登陆 RSS
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi QQ网摘
???en_US.forumThreadNext.name??? 下一主题
Go 共有 3 回复(1页) 阅读5次
 发表新帖子   回复该主题贴
xysniper



发表文章:
注册时间: 2007年11月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
banq 你好,再请教几个模式 2006年10月18日 10:27 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
标签     
你好,请看看我这样理解对不对,谢谢!
Template:其实就是先定义一个操作的架子,把一些操作延迟到其子类中完成,而不是放在同一个类中,这样当父类变化了,只需要再加一个子类就可以了,其它代码不必修改

Observer:其实就是在执行这个类的代码时,同时触发别一个类的代码被执行,具体是有一个Observer观察者类,这个观察者被加入到要观察的类中,当这个被观察的类的对象发生变化时,观察者就能自动观察到这个对象发生了变化,同时观察者会进行相应的操作, 其实我觉的这种操作不用这个模式也能实现

Visitor(访问者):这个模式主对针对Collection类设计的,为了不使访问Collection类中的元素使用多重if else来判断其类型(因为Collection中的元素可能有多种类型),才使用些模式,具体是对要访问的类型做一下封装,让程序能够对这个类型进行访问,这是被访问者,另外还有访问者Visitor,访问者定义了对每个类型进行访问的接口,其实现可以有多个,这样可以不用多个IF ELSE判断了,因为其元素已经可访问了,直接访问就行。

提问:JdbcTemplate,HibernateTemplate是不是此模式的应用,这个模式中父类是不是就是一个Template类,比如你举例中Benchmark类?
banq



发表文章: 10843
注册时间: 2002年08月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 26人关注
Re: banq 你好,再请教几个模式 2006年10月18日 14:40 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
>这样当父类变化了,只需要再加一个子类就可以了
父类不能变化,是模板实现细节(需求)变化了,那么增加子类就可以。JdbcTemplate,HibernateTemplate是模板模式。

>观察者, 其实我觉的这种操作不用这个模式也能实现
敢于思考就非常好,观察者模式是将微观和宏观一种通讯方式进行了总结,模式不是用来实现功能的,这也是很多人误用模式一个地方,模式是一种总结,以便下次碰到相关场景,快速使用到成熟的解决方案,模式是一个解决方案。

你觉得这种操作不用模式也能实现,只是可能看到多线程的一种实现,一个线程抛出另外一个线程,如果将多线程作为解决方案,就范眼界狭小的毛病,这是很多有经验的程序员老毛病,在JavaEE架构中,线程已经非常底层,是非常细节,很多功能需要一个宏观考虑(灵活性、可伸缩性等)。

上升为观察者模式,我们就可以以解决方案替代具体细节,就象以接口替代具体实现子类,我们自己的程序设计也需要抽象,也要象我们用的Java工具一样,有接口抽象设计概念,模式就是这样的。

>Visitor为了不使访问Collection类中的元素使用多重if else来判断其类型(因为Collection中的元素可能有多种类型),才使用些模式。
不能这么说,不是为了避免if else,在模式设计中,由于使用了对象概念,if else的消灭是一个副作用,也就是模式使用的一个衍生品,为了消灭if else而消灭,会陷入死胡同。

访问者是为了在不改变集合中对象(否则破坏封装)前提下,由访问者自己定义对这些对象访问行文,也就是调用行为,访问者和IOC或DI一样,都是解决一种调用关系的。



xysniper



发表文章: 164
注册时间: 2007年11月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 2人关注
Re: banq 你好,再请教几个模式 2006年10月18日 17:02 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
>父类不能变化,是模板实现细节(需求)变化了,那么增加子类就可以。JdbcTemplate,HibernateTemplate是模板模式。
模板实现细节(需求)变化了:这个实现细节具体指哪个类中的方法?
JdbcTemplate,HibernateTemplate应该是指父类吧(也就是定义操作架子的类)?
>观察者, 其实我觉的这种操作不用这个模式也能实现
我没有用多线程,我想串行调用,就是在setPrice时,调用观察者代码,只是这样可能体现不了并行
banq



发表文章: 10843
注册时间: 2002年08月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 26人关注
Re: banq 你好,再请教几个模式 2006年10月19日 15:20 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
JdbcTemplate,HibernateTemplate中定义的抽象方法内容可能发生变化。
标签     
共有 3 回复(1页) Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入网上的图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 上传图片 word文档 Txt等附件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl-V可取出;提问题前先查询标签列表

使用帮助 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的软件架构社区 推荐FireFox或Chrome快速浏览本站
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-09 jdon.com
anti spam