博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA 设计模式 中介者模式
阅读量:7251 次
发布时间:2019-06-29

本文共 2262 字,大约阅读时间需要 7 分钟。

用途


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

应用场景

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

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

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

 

推荐

本文属于

参考资料

《大话设计模式》

《HeadFirst设计模式》

 

转载地址:http://nzebm.baihongyu.com/

你可能感兴趣的文章
Vue动态控制input的disabled属性
查看>>
TCP的局限性有哪些?
查看>>
【前端数据结构基础】栈
查看>>
沙漠种水稻,88岁的袁隆平又创造奇迹!他参与的“袁米”还有个大计划
查看>>
JS基础入门篇(二十四)—DOM(上)
查看>>
阿里架构师眼里JVM可以说的那些事
查看>>
如何将应用完美迁移至Android P版本
查看>>
对数据科学家来说最重要的算法和统计模型
查看>>
Angular4 反向代理Details
查看>>
AngularJS 过滤器
查看>>
【Ubuntu17.10】【Python】菜鸟新建文件夹、给予777权限、新建一个简单的python脚本测试...
查看>>
2018 浅谈前端面试那些事
查看>>
flutter实战3:解析HTTP请求数据和制作新闻分类列表
查看>>
react onCompositionStart/Update/onCompositionStartEnd 触发时机
查看>>
一个强大的批处理文件
查看>>
基于 Swoole 的微信扫码登录
查看>>
Largest Rectangle in Histogram
查看>>
聊聊pg jdbc的queryTimeout及next方法
查看>>
golang 依赖管理
查看>>
Java常用工具类整理
查看>>