JAVA 设计模式 中介者模式

简介: 用途 中介者模式 (Mediator) 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 中介者模式是一种行为型模式。

用途


中介者模式 (Mediator)
用一个中介对象来 封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式是一种 行为型模式



结构

图-中介者模式结构图

Mediator : 为 Colleague 对象定义一个交流接口。
abstract  class Mediator {
     public  abstract  void Send(String message, Colleague colleague);
}

ConcreteMediator : 实现 Mediator 中的交流接口。 这个类中需要了解并维护所有的 colleague 对象。

class ConcreteMediator  extends Mediator {
     private ConcreteColleague1 colleague1;
     private ConcreteColleague2 colleague2;

     public  void setColleague1(ConcreteColleague1 colleague1) {
         this.colleague1 = colleague1;
    }
    
     public  void setColleague2(ConcreteColleague2 colleague2) {
         this.colleague2 = colleague2;
    }
     
    @Override
     public  void Send(String message, Colleague colleague) {
         if (colleague == colleague1) {
            colleague2.Notify(message);
        }  else  if (colleague == colleague2){
            colleague1.Notify(message);
        }  else {
            System.out.println("Error!");
        }
    }
}

Colleague组 : 每个 Colleague 对象应该知道它的 Mediator 对象,但不知道其他同事对象。它只能联系 Mediator 对象。

abstract  class Colleague {
     protected Mediator mediator;
    
     public Colleague(Mediator mediator) {
         this.mediator = mediator;
    }
    
     public  void Send(String message) {
        mediator.Send(message,  this);
    }
    
     public  abstract  void Notify(String message);
}

class ConcreteColleague1  extends Colleague {
     public ConcreteColleague1(Mediator mediator) {
         super(mediator);
    }
    
    @Override
     public  void Notify(String message) {
        System.out.println("同事1得到信息:" + message);
    }
}

class ConcreteColleague2  extends Colleague {
     public ConcreteColleague2(Mediator mediator) {
         super(mediator);
    }

    @Override
     public  void Notify(String message) {
        System.out.println("同事2得到信息:" + message);
    }
}

测试代码

public  class MediatorPattern {
     public  static  void main(String[] args) {
        ConcreteMediator mediator =  new ConcreteMediator();
        ConcreteColleague1 colleague1 =  new ConcreteColleague1(mediator);
        ConcreteColleague2 colleague2 =  new ConcreteColleague2(mediator);
        
        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);
        
        colleague1.Send("How are you?");
        colleague2.Send("Fine, thank you. And you?");
        colleague1.Send("I'm fine. Thankes.");
    }
}

运行结果

同事2得到信息:How are you?
同事1得到信息:Fine, thank you. And you?
同事2得到信息:I'm fine. Thankes.



应用场景

中介者模式一般用于定义良好但是交互较为负责的对象集合。产生的相互依赖关系是无结构化的并且难以理解。

和很多其他对象有引用关系以及交互的对象很难被重用。

想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。


 

推荐

本文属于 JAVA设计模式系列



参考资料

《大话设计模式》

《HeadFirst设计模式》

 

目录
相关文章
|
设计模式 前端开发
Java-设计模式-20-中介者模式
中介者模式(Mediator Pattern)就是用一个中介类将多个对象和类之间的交互全部放到该类中来处理,这样使得对象之间不需要显式的相互通信,降低代码的耦合性。也属于行为型模式。
64 0
Java-设计模式-20-中介者模式
|
设计模式 开发工具 数据库
Java--设计模式-21-中介者模式
备忘录模式(Memento Pattern)就是通过一个备忘录类专门保存一个对象的某个状态,使得该对象可以随时恢复到保存的这个状态。
73 0
Java--设计模式-21-中介者模式
|
设计模式 Java
Java中常用的设计模式【模板模式】
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
83 0
Java中常用的设计模式【模板模式】
|
设计模式 算法 Java
Java中常用的设计模式【策略模式】
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
131 0
Java中常用的设计模式【策略模式】
|
设计模式 算法 Java
JAVA 设计模式-策略模式
策略模式(Strategy Pattern) 也叫 政策模式(Policy Pattern)。指的是对象具备某个行为,但是在不同的场景中,该行为有不同的实现算法
177 0
|
设计模式 算法 Java
java 设计模式之模板方法模式
java 设计模式之模板方法模式
112 0
java 设计模式之模板方法模式
|
设计模式 算法 Java
Java-设计模式之策略模式
策略模式作为常用的设计模式之一,在我们开发过程中经常会被用到;本文从概念、角色、实例应用、设计原则、优缺点和应用场景等方面对策略模式进行了解读,希望可以对大家有所帮助;如果有问题,欢迎大家来指证和讨论;
802 0
Java-设计模式之策略模式
|
Java
JAVA中的设计模式四(装饰模式)
-------装饰模式   装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
1050 0
|
算法 Java Go
JAVA中的设计模式三(策略模式)
问题: 如何让算法和对象分开来,使得算法可以独立于使用它的客户而变化?   方案: 把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。
789 0