文档章节

学习设计模式——中介者模式

江左煤郎
 江左煤郎
发布于 2018/10/18 23:21
字数 930
阅读 12
收藏 0

1. 认识中介者模式

    1. 定义:用一个中介对象来封装一系列的对象交互行为,中介者使得各对象不需要显式的互相引用,从而使其松散耦合,独立的改变他们之间的交互。

    2. 结构:

  • Mediator:中介者接口,在里面定义各个同事之间交互需要的办法,可以是公共的通讯方法,也可以是小范围的交互方法。
  • MediatorImpl:中介者具体实现类,他需要了解并维护各个交互的对象,并负责各个对象之间的交互关系。
  • Colleague:同事类,同事类通常定义为抽象类,主要负责约束同事对象的类型,并实现一些公共方法,比如每个同事类都应该持有中介者对象。
  • ColleagueImpl:具体的同事类,实现自己的功能,在需要与其他同事类进行交互时,就通过持有的中介者对象来进行交互。

    3. 参考代码实现:

/**
 * @ClassName:Mediator
 * @Description:中介者接口
 */
public interface Mediator {
	//定义同事对象之间的交互接口,比如
	public void exchange(Colleague c);

}
/**
 * @ClassName:MediatorImpl
 * @Description:中介者具体实现类,必须维护一系列需要交互的同事类对象
 */
public class MediatorImpl implements Mediator {
	//维护同类对象
	private ColleagueImplA a;
	private ColleagueImplB b;

	public void setA(ColleagueImplA a) {
		this.a = a;
	}

	public void setB(ColleagueImplB b) {
		this.b = b;
	}

	@Override
	public void exchange(Colleague c) {
		// 在此处定义同事类对象之间的交互动作,传入参数c表示该对象发生了变化,需要与其他同事类对进行交互
		
	}

}

/**
 * @ClassName:Colleague
 * @Description:同事类的抽象父类
 */
public abstract class Colleague {
	//持有中介者对象
	Mediator m;
	public Colleague(Mediator m){
		this.m=m;
	}
	//获取当前同事类对象中的中介者对象
	public Mediator getMediator(){
		return m;
	}
}

public class ColleagueImplA extends Colleague{
	public ColleagueImplA(Mediator m) {
		super(m);
	}
	//示意方法,表示某些功能
	public void operation(){
		//如果需要与其他同事类对象进行交互,通知中介者对象
		getMediator().exchange(this);
		
	}
}
public class ColleagueImplB extends Colleague{
	public ColleagueImplB(Mediator m) {
		super(m);
	}
	//示意方法,表示某些功能
	public void operation(){
		//如果需要与其他同事类对象进行交互,通知中介者对象
		getMediator().exchange(this);
		
	}
}

2. 理解中介者模式

    1. 功能:封装对象之间的交互行为,由中介者对象来处理多个对象之间的交互关系。

    2. Mediator接口不一定需要,可以直接使用中介者实现类,这取决于中介者类是否需要多个实现类型,或者说是否需要扩展版本,

    3. 同事类:在中介者模式中,所有同事类都需要继承同一个父类来建立起一个同事的关系。

    4. 中介者类对象与同事类对象之间的通信:一种实现方法是定义一个特殊的通知接口,作为一个通用的方法,让各个同事类对象调用该方法,比如上面的参考代码;还有一种实现方法,可以使用观察者模式,让Mediator成为观察者,同事类为Subject,同事类对象发送变化就会通知观察者进行对应的交互行为。

    5. 优缺点:

  • 松散耦合
  • 集中控制交互
  • 多对多变为一对多
  • 缺点就是过度集中化

 

© 著作权归作者所有

共有 人打赏支持
江左煤郎
粉丝 26
博文 86
码字总数 220642
作品 0
西安
后端工程师
私信 提问
《JavaScript设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0
《JavaScript设计模式与开发实践》模式篇(11)—— 中介者模式

中介者模式的作用就是解除对象与对象之间的紧耦合关系。增加一个中介者对象后,所有的 相关对象都通过中介者对象来通信,而不是互相引用,所以当一个对象发生改变时,只需要通知 中介者对象即...

嗨呀豆豆呢
2018/12/23
0
0
《JavaScript设计模式与开发实践》最全知识点汇总大全

系列文章: 《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply 《JavaScript设计模式与开发实践》基础篇(2)—— 闭包和高阶函数 《JavaScript设计模式与开发实践》模式...

嗨呀豆豆呢
01/04
0
0
《JavaScript设计模式与开发实践》模式篇(12)—— 装饰者模式

在传统的面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活, 还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之 改变;另一方...

嗨呀豆豆呢
2018/12/25
0
0
【软考学习】设计模式——中介者模式

【背景】 设计模式是非常重要的一块知识,每个设计模式都值得深入了解和学习。 【内容】 结构型设计模式总结: 中介者设计模式总结: 一、定义:用于一个中介对象来封装一系列的对象交互。中...

yym15732626210
2018/01/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 安装electron-rebuild cnpm ins......

Chason-洪
今天
3
0
eclipse中项目svn转gitLab全过程

在工作中,我们可能会遇到项目从svn迁移到gitLab;此过程我们需要变化版本管理工具,上传代码。本篇博客记录了使用spring tool suit(sts/eclipse)进行项目迁移的全过程。 步骤: (1)端口之...

em_aaron
今天
3
0
scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
今天
1
0
通俗易懂解释网络工程中的技术,如STP,HSRP等

导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面...

问题终结者
昨天
4
0
看了一下Maven的内容

了解了Maven其实是一个跨IDE的标准构建工具,能推广的原因估计是借了仓库的便利。 另一个作用是可以通过Maven的功能在社区版的IDEA去创建Web项目,下次实践看看

max佩恩
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部