美文网首页java设计模式笔记
设计模式十八--中介者模式

设计模式十八--中介者模式

作者: 朽木亦自雕 | 来源:发表于2019-03-30 15:31 被阅读0次

    定义

    用一个中介对象封装一系列对象的交互,终结者使各个对象不需要显示的相互引用,从而使耦合度松散,而且可以独立的改变他们各自的交互方式。

    中介者模式的角色

    1:抽象中介者(Mediator)
    该角色定义出同事对象到中介者之间的统一接口,用于各同事之间的通信。

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

    2:具体中介者(ConcreateMediator)
    该角色实现抽象中介者,它依赖于各个同事角色,并通过协调各同事角色实现协作行为。

    public class ConcreteMediator extends Mediator{
      private ConcretaeColleague c1;
      private ConcretaeColleague c2;
      public void colleagueChanged(Colleague c){
        c1.action();
        c2.action();
      }  
      public void createConcreteMediator(){
        c1 = new ConcreteColleague(this);
        c2 = new ConcreteColleague(this);
      }
      public ConcreteColleague getc1(){
          return c1;
      }
      public ConcreteColleague getc2(){
        return c2;
      }
    }
    

    3:抽象同事角色(Colleague)
    该角色定义出中介者到同事之间的接口,同事对象只知道中介者而不知道其余的同事对象。

    public abstract class Colleague{
      private Mediator mediator;  
      public Colleague(Mediator mediator){
        this.mediator = mediator;
      }  
      public Mediator getMediator{
        return this.mediator;
      } 
      public void setMediator(Mediator mediator){
        this.mediator = mediator;
      }
      //调用此方法改变自身的状态
      public void change(){
        this.mediator.colleagueChanged(this);
      }
      //抽象行动,子类实现
      public abstract void action();
    }
    

    4:具体同事(ConcreateColleague)
    该角色实现同事类,每个具体同事类都清楚自己小范围块的行为,而不知道大范围的目的。

    //第一个同事
    public class ConcreteColleague1 extends Colleague{
      public ConcreteColleague1(Mediator mediator){
        super(mediator); 
      }
        @Override
        public void action(){
          System.out.println("action1 !");
        }
    }
    //第二个同事
    public class ConcreteColleague2 extends Colleague{
      public ConcreteColleague2(Mediator mediator){
        super(mediator); 
      }
        @Override
        public void action(){
          System.out.println("action2 !");
        }
    }
    

    优点

    1:减少类之间的依赖,将原有一对多的关系变成一对一的依赖,使得对象之间的关系容易维护。
    2:避免同事对象之间过度耦合,同类只依赖于中介者,使同类更容易被复用。
    3:中介者模式将对象的协作和行为抽象,将对象在小尺度行为上与其他对象的相互作用分开处理。

    缺点

    1:中介者模式降低了同事类之间的复杂性,但是增加了中介者类的复杂性。
    2:中介者经常充满各种具体同事类的关系协调代码,并且代码不能复用。

    注意事项

    1:不应当在责任划分混乱的时候使用。
    2:不应当对数据类和方法类使用。
    3:正确理解封装(行为封装)

    参考资料:设计模式(java)

    相关文章

      网友评论

        本文标题:设计模式十八--中介者模式

        本文链接:https://www.haomeiwen.com/subject/uazqlqtx.html