java设计模式(十九)中介者模式(Mediator Pattern)

1、模式介绍:

中介者模式是一种行为设计模式,它允许对象之间通过一个中介对象进行协作,而不直接相互引用,从而降低了它们之间的耦合度。在中介者模式中,对象之间的交互被封装在一个中介对象中,对象不再直接交互,而是通过中介者进行通信。

2、应用场景:

当一组对象之间的通信方式复杂,并且每个对象都需要了解其他对象的状态时,可以使用中介者模式简化对象之间的交互。
当多个对象之间形成的网状结构导致难以维护时,可以引入中介者来集中控制和管理对象之间的交互。

3、优点:

降低了对象之间的耦合度,使得对象易于独立复用。
将多个对象之间的交互集中管理,减少了代码的复杂性。
可以简化对象之间的通信,使得系统更易于维护和扩展。

4、缺点:

中介者模式会导致中介者本身变得复杂且难以维护,特别是当逻辑复杂、对象之间关系多变时。
如果设计不当,中介者本身可能成为系统的瓶颈,影响系统的性能。

5、代码示例:

/**
 * 中介者接口
 */
public interface Mediator {
	void sendMessage(String message, Colleague colleague);
}

/**
 * 同事类抽象接口
 */
abstract class Colleague {
	protected Mediator mediator;

	public Colleague(Mediator mediator) {
		this.mediator = mediator;
	}

	public abstract void sendMessage(String message);
	public abstract void receiveMessage(String message);
}

/**
 * 具体中介者
 */
public class ConcreteMediator implements Mediator {
	private List<Colleague> colleagues = new ArrayList<>();

	public void addColleague(Colleague colleague) {
		colleagues.add(colleague);
	}

	@Override
	public void sendMessage(String message, Colleague originator) {
	 	// 中介者接收到消息后,转发给其他同事
	 	for (Colleague colleague : colleagues) {
	 		if (colleague != originator) {
	 			colleague.receiveMessage(message);
	 	    }
	 	}
	}
}

/**
 * 具体同事类
 */
public class ConcreteColleague1 extends Colleague{
	public ConcreteColleague1(Mediator mediator) {
	 super(mediator);
	}

	@Override
	public void sendMessage(String message) {
		mediator.sendMessage(message, this);
	}

	@Override
	public void receiveMessage(String message) {
		System.out.println("ConcreteColleague1 received: " + message);
	}
}

/**
 * 具体同事类
 */
public class ConcreteColleague2 extends Colleague {
	public ConcreteColleague2(Mediator mediator) {
		super(mediator);
	}

	@Override
	public void sendMessage(String message) {
		mediator.sendMessage(message, this);
	}

	@Override
	public void receiveMessage(String message) {
		System.out.println("ConcreteColleague2 received: " + message);
	}
}

/**
 * 应用
 */
public class MediatorClient {
	public static void main(String[] args) {
		ConcreteMediator mediator = new ConcreteMediator();

		ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
		ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);

		mediator.addColleague(colleague1);
		mediator.addColleague(colleague2);

		colleague1.sendMessage("Hello from Colleague1");
		colleague2.sendMessage("Hi from Colleague2");
	}
}

6、示例讲解:

Mediator 定义了中介者的接口,包括发送消息的方法。
ConcreteMediator 是具体的中介者实现,维护了一个同事列表,并实现了消息的转发逻辑。
Colleague 是同事类的抽象,包含了一个中介者对象和发送、接收消息的抽象方法。
ConcreteColleague1 和 ConcreteColleague2 是具体的同事类实现,它们通过中介者来发送和接收消息。
在 main 方法中,创建了中介者对象和多个同事对象,并演示了它们通过中介者进行消息交互的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值