设计模式之中介者模式

中介者模式是一种行为设计模式,通过创建一个中介对象来封装一系列对象的交互,降低对象间的耦合度。在MVC模式中,Controller作为Model和View的中介者。文章详细介绍了中介者模式的四个角色,包括抽象中介者、具体中介者、抽象同事类和具体同事类,并通过代码示例展示了如何避免类之间的直接引用。同时,提到了中介者模式可能带来的复杂性和注意事项。
摘要由CSDN通过智能技术生成

中介者模式

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

比如 MVC 模式,C(Controller 控制器)是 M(Model 模型)和 V(View 视图)的中介者,在前后端交互时起 到了中间人的作用。

中介者模式的四个角色

  • Mediator(抽象中介者):定义了同事对象到中介者对象之间的接口。
  • ConcreteMediator(具体中介者):具体的中介者对象,实现抽象方法。它需要知道所有具体的同事类,即用一个集合来管理 HashMap,并接受某个同事对象消息,完成相应的任务。
  • Colleague(抽象同事类):抽象的同事类,各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时它维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。
  • ConcreteColleague(具体同事类):具体的同事类,会有很多。每个同事只知道自己的行为,而不了解其他同事类的行为(方法),但他们都依赖中介者对象。

image-20201008214553164

中介者模式中,中介者对象处于核心地位,它主要有两个作用:

  • 结构上起到中转作用。通过中介对象对关系的封装,使得具体的同事类不再需要显式地引用其他对象,它只需要通过中介者就可以完成其他同事类之间的通信。
  • 行为上起到协作作用。中介者对同事类之间的关系进行封装,同事类在不需要知道其他对象的情况下通过中介者与其他对象完成通信。在这个过程中同事类是不需要指明中介者该如何做,中介者可以根据自身的逻辑来进行协调,对同事的请求进一步处理,将同事成员之间的关系行为进行分离和封装。

举一个栗子

代码例子来源于这篇博客 23种设计模式(7):中介者模式,这篇博客写得很好,建议大家看一看。

有两个类A和B,类中各有一个数字,并且要保证类B中的数字永远是类A中数字的100倍。也就是说,当修改类A的数时,将这个数字乘以100赋给类B,而修改类B时,要将数除以100赋给类A。类A类B互相影响,就称为同事类。代码如下:

abstract class AbstractColleague {
   
	protected int number;
 
	public int getNumber() {
   
		return number;
	}
 
	public void setNumber(int number){
   
		this.number = number;
	}
	//抽象方法,修改数字时同时修改关联对象
	public abstract void setNumber(int number, AbstractColleague coll);
}
 
class ColleagueA extends AbstractColleague{
   
	public void setNumber(int number, AbstractColleague coll) {
   
		this.number = number;
		coll.setNumber(number*100);
	}
}
 
class ColleagueB extends AbstractColleague
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值