[设计模式] 调停者模式(Mediator Pattern)

调停者模式是一种设计模式,旨在降低对象间的耦合度,通过将交互逻辑集中到调停者对象中,使得对象间的通信更加简单。本文探讨了为何需要使用调停者模式,其在系统扩展性上的优势,并通过斗地主游戏的实例展示了如何实现和使用调停者模式。同时,也提到了调停者模式可能导致的过度集中化问题,即调停者对象可能变得过于复杂,影响维护和调试。
摘要由CSDN通过智能技术生成

什么是调停者模式?

调停者模式是一种旨在降低一系列对象之间耦合关系的设计模式。在一个系统中,对象与对象之间是不可避免发生各种通信,共同合作完成特定的功能。我们把这些对象成为同事对象(Collegue)。通过将同事对象之间的交互逻辑提取、封装在调停者(Mediator)对象里,消除了这些对象之间明显的相互引用,让它们只通过一个调停者进行合作,从而降低了对象之间的耦合度,增加对象的可复用性。

为什么要使用调停者模式?

在不使用调停者模式的代码中,同事对象之间的调用关系可能是一个复杂的网状结构,如下图所示在这里插入图片描述
上图所示的系统就是一个过度耦合的系统,这种系统如果要加入一个新的对象,就要考虑新对象与所有已有对象之间的交互作用,使这个系统的扩展变得特别困难。那么我们把每个对象之间的交互集中在一个中间类里,让所有的对象只跟这一个中间类交互,就把这种网状结构转换成了星状结构
在这里插入图片描述
在这种结构的系统中,我们新加一个对象的时候,只需要考虑这个对象怎么跟调停者对象交互即可,大大提高了系统的可扩展性。

我们用一个简易版的斗地主案例,来说明一下在不使用调停者模式下,对象之间交互的复杂性。

我们都知道,斗地主的规则里,如果地主获胜了,自己加分,两个农民扣分。而如果一个农民胜了,那么自己和另一个农民加分,地主扣分。

// 地主类
public class Landlord {
   
	private int score; // 现有分数
	
	public Landlord() {
   
		this.score = 0;
	}
	
	public void win(Farmer[] farmers) {
   
		this.score += 20;
		for(Farmer farmer : farmers) {
   
			farmer.lose();
		}
	}
	
	public void lose() {
   
		this.score -= 20;
	}
}

// 农民类
public class Farmer {
   
	private int score;
	
	public Farmer() {
   
		this.score = 0;
	}
		
	pub
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值