banq 你好,请教模式

你好,banq,我的理解对吗?谢谢回答指正

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

>Mediator(中介者):
你的描述有道理,但是我好像看到象是Facade模式的描述,你能否再比较一下Mediator和Facade模式呢?

呵呵:
Facade:是封装,把一些反复书写的或一些模板式的代码封装起来,供程序中多次调用,比如JDBC操作中,可以封装一些模板式的代码,以使程序更加简明,此模式只是强调封装,目的是少写一些代码
Mediator:是分离,把多个互相会受影响的对象分开,这些对象不再直接交互,而是通过Mediator对象间接交互,这样,这些同事对象之间不再直接偶合,一个对象的改变,不会引起别外一个对象的变化,此模式强调分离,目的是提高程序的可修改性

这两者更重要区别是:结构型模式和行为模式区别。
Facade模式注重结构;Mediator模式是行为,也就是运行时的行为,Mediator封装的是通讯行为。

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

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

对,Facade是属于结构模式,适合当对象未来行为复杂变化时,如果进行结构搭建,才能适应这个行为的变化。
而Mediator则是对通讯行为的封装,把A和B之间通讯的行为进行了封装改变(由直接交互改变为间接交互)
Observer则把这种通讯行为交由Observer来处理,相当于是分离

结构型模式和行为模式主要区别在于:一个是代码级别;而后者是在代码阶段决定运行事情,后者更复杂一些,举个例子,后者类似航天器的设计,在航天器设计时,我们是设计其运行时的各种功能。而结构型模式则只是为了代码的容易理解和松耦合而用,与运行无关。

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

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

这也是我批判Ruby on rails为了简化而在Action中写入业务逻辑的原因。
简化不能以丧失OO设计为代价,否则我们回到Foxpro!