为生存而奔跑

   :: 首页 :: 联系 :: 聚合  :: 管理
  271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

留言簿(5)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 324044
  • 排名 - 74

最新评论

阅读排行榜

评论排行榜

Mediator模式包装了一系列对象的相互作用的方式,使得这些对象不必相互明显引用,从而降低耦合性。

尽管将一个系统分割成许多对象通常可以增加其可复用性,但是对象间相互连接的激增又会降低其可复用性了。大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难。

作用:用一个中介对象封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了‘多对多’交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。

中介者模式的优点:首先,Mediator的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator。其次,由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统。

中介者模式的缺点:由于ConcreteMediator控制了集中化,于是就把交互复杂性变为了中介者的复杂性,这就使得中介者会变得比任何一个ConcreteColleague都复杂。



abstract class Mediator
{
    
public abstract void colleagueChanged(Colleague c);
}

class ConcreteMediator extends Mediator
{
    
private Colleague1 colleague1;
    
private Colleague2 colleague2;
    
public Concretemediator()
    
{
        colleague1
=new Colleague1();
        colleague2
=new Colleague2();
    }

    
public void colleagueChanged(Colleague c)
    
{
        colleague1.action();
        colleague2.action();
    }

}

abstract class Colleague
{
    Mediator m;
    
public Colleague(Mediator m)
    
{
        
this.m=m;
    }

    
public void change()
    
{
        m.colleagueChanged(
this);
    }

    
public abstract void action(); 
}

class Colleague1 extends Colleague
{
    
public Colleague1(Mediator m)
    
{
        
super(m);
    }

    
public void action()
    
{
        System.out.println(
"action from Colleague1");
    }

}

class Colleague2 extends Colleague
{
    
public Colleague2(Mediator m)
    
{
        
super(m);
    }

    
public void action()
    
{
        System.out.println(
"action from Colleague2");
    }

}

public class Client
{
    
public static void main(String[] args) 
    
{
        ConcreteMediator mediator
=new ConcreteMediator();
        Colleague1 c1
=new Colleague1(mediator);
        Colleague2 c2
=new Colleague2(mediator);
        mediator.colleagueChanged(c1);
    }

}

posted on 2009-11-30 09:51 baby-fly 阅读(1284) 评论(1)  编辑 收藏 引用 所属分类: Design Pattern

Feedback

# re: 设计模式--Mediator模式 2011-09-20 09:54 七弦
你给的这个例子是错的
Colleage没有提供无参构造函数。得把Colleage派生类的实例传递进去。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理