JAVA 设计模式 中介者模式

简介:

用途


中介者模式 (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.



应用场景

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

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

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


 本文转自静默虚空博客园博客,原文链接:http://www.cnblogs.com/jingmoxukong/p/4238479.html,如需转载请自行联系原作者

相关文章
|
11天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
28 0
[Java]23种设计模式
|
27天前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
2月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
2月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
2月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
2月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
2月前
|
设计模式 运维 算法
Java设计模式-策略模式(15)
Java设计模式-策略模式(15)
|
2月前
|
设计模式 算法 Java
Java设计模式-模板方法模式(14)
Java设计模式-模板方法模式(14)
|
2月前
|
设计模式 存储 安全
Java设计模式-组合模式(13)
Java设计模式-组合模式(13)