JiveJdon Community Forums
在线71人   首页   主题总表   培训咨询   精华   查搜   注册    登陆
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 5 回复 / 1
 发表新帖子   回复该主题贴
thinkjava

悄悄话
发表文章: 110
注册时间: 2007年11月03日 19:22
banq 你好,请教模式 2006年10月25日 11:18 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 mediator模式(2)      设计模式(142)     
你好,banq,我的理解对吗?谢谢回答指正

Mediator(中介者):多个对象之间发生互相的交互行为,对象既会影响别的对象,又会被别的对象所影响,这些同事对象通过彼此的相互作用形成系统的行为,呈现一种网状结构,通过引入中介者对象(Mediator)系统则会变为以中介者为中心的一种星型结构,在这种结构中同事对象不再通过直接的联系与另一对象发生相互作用,而是通过中介者对象与另一对象发生相互作用,这样整个系统就不会因为新的对象引入或删除造成大量的修改工作,仅仅是中介对象发生改动,这样系统提高了可扩展性和可修改性
Strategy(策略):其实就是把一个算法或其它逻辑封装成一个单独的类,比如A类,通过另一个类B注入这个类A,然后在这个类B中通过A类的对象调用A类中定义的算法,这样可以在运行期间自由地选择不同的算法,提高系统的灵活性
banq

悄悄话
发表文章: 9290
注册时间: 2002年08月03日 17:08
Re: banq 你好,请教模式 2006年10月25日 14:53 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
>Mediator(中介者):
你的描述有道理,但是我好像看到象是Facade模式的描述,你能否再比较一下Mediator和Facade模式呢?

thinkjava

悄悄话
发表文章: 110
注册时间: 2007年11月03日 19:22
Re: banq 你好,请教模式 2006年10月26日 10:54 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
呵呵:
Facade:是封装,把一些反复书写的或一些模板式的代码封装起来,供程序中多次调用,比如JDBC操作中,可以封装一些模板式的代码,以使程序更加简明,此模式只是强调封装,目的是少写一些代码
Mediator:是分离,把多个互相会受影响的对象分开,这些对象不再直接交互,而是通过Mediator对象间接交互,这样,这些同事对象之间不再直接偶合,一个对象的改变,不会引起别外一个对象的变化,此模式强调分离,目的是提高程序的可修改性
banq

悄悄话
发表文章: 9290
注册时间: 2002年08月03日 17:08
Re: banq 你好,请教模式 2006年10月26日 13:59 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
这两者更重要区别是:结构型模式和行为模式区别。
Facade模式注重结构;Mediator模式是行为,也就是运行时的行为,Mediator封装的是通讯行为。

Observer模式则是分离通讯行为。

拜托你以后标题写明是什么模式,如果一律是“banq你好 请教模式”,是不是太单调?
thinkjava

悄悄话
发表文章: 110
注册时间: 2007年11月03日 19:22
Re: banq 你好,请教模式 2006年10月26日 15:07 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
对,Facade是属于结构模式,适合当对象未来行为复杂变化时,如果进行结构搭建,才能适应这个行为的变化。
而Mediator则是对通讯行为的封装,把A和B之间通讯的行为进行了封装改变(由直接交互改变为间接交互)
Observer则把这种通讯行为交由Observer来处理,相当于是分离
banq

悄悄话
发表文章: 9290
注册时间: 2002年08月03日 17:08
Re: banq 你好,请教模式 2006年10月27日 12:39 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
结构型模式和行为模式主要区别在于:一个是代码级别;而后者是在代码阶段决定运行事情,后者更复杂一些,举个例子,后者类似航天器的设计,在航天器设计时,我们是设计其运行时的各种功能。而结构型模式则只是为了代码的容易理解和松耦合而用,与运行无关。

从这点看:Facade模式和Mediator有本质的区别,当然你可以说:Mediator是基于Facade模式基础的,它至少也是一个Facade,但它的重点不是这里,而是协调前后通讯、前后台流向。

MVC模式中Controller实际就是一个Mediator,所以,既然Controller/Struts Action已经承担Mediator功能,我们遵循OO的封装分派原则,实现功能分离,因此,不能再在Controller/Action中加入业务功能,业务逻辑应该在Model/Service中实现。

这也是我批判Ruby on rails为了简化而在Action中写入业务逻辑的原因。
简化不能以丧失OO设计为代价,否则我们回到Foxpro!
这个主题有 5 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam