Java设计模式(22)行为型:中介者模式

(一)模式概念

中介者模式是指用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。该模式只需关心和Mediator类的关系,具体类类之间的关系及调度交给中介者就行。

(二)模式结构

1)抽象中介者:

定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。
2)中介者实现类:

从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类
3)同事类:

如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。

(三)Demo

比如有两个类,他们都是做持久化的,一个负责将数据写入文件,一个负责将数据写入数据库。他们谁先接收到数据是不确定的,但是要确保其中一个接收到数据后,另外一个也必须完成这些数据的持久化。如果我们直接将两个类关联在一起,互相调用是可以实现的,但不利于后期扩展或维护(比如再添加一个持久化组建,则原有的组建可能都需要修改),此时,可使用中介者模式。

抽象中介者:

public interface IMidiator {
	public Midiator setPersistentDB(PersistentDB persistentDB);

	public Midiator setPersistentFile(PersistentFile persistentFile);

	public void notifyOther(IPersistent persistent, Object data);
}
中介者具体实现:
public class Midiator {
	PersistentDB persistentDB;// 此处可以使用List来存放所有的同事
	PersistentFile persistentFile;

	public Midiator setPersistentDB(PersistentDB persistentDB) {
		this.persistentDB = persistentDB;
		return this;
	}

	public Midiator setPersistentFile(PersistentFile persistentFile) {
		this.persistentFile = persistentFile;
		return this;
	}

	public void notifyOther(IPersistent persistent, Object data) {
		if (persistent instanceof PersistentDB)// 如果同事都放在List中,此处遍历即可
			persistentFile.getData(data);
		if (persistent instanceof PersistentFile)
			persistentDB.getData(data);
	}
}
同事类:
public interface IPersistent {
	void getData(Object data);
	void getData(Object data,Midiator midiator);
	void saveData();
}
public class PersistentDB implements IPersistent {
	private Object data;

	@Override
	public void getData(Object data, Midiator midiator) {
		getData(data);
		midiator.notifyOther(this, data);
	}

	@Override
	public void saveData() {
		System.out.println(data + " 已保存到数据库");
	}

	@Override
	public void getData(Object data) {
		this.data = data;
		saveData();
	}
}
public class PersistentFile implements IPersistent {
	private Object data;

	@Override
	public void getData(Object data, Midiator midiator) {
		getData(data);
		midiator.notifyOther(this, data);
	}

	@Override
	public void saveData() {
		System.out.println(data + " 已保存到文件");
	}

	@Override
	public void getData(Object data) {
		this.data = data;
		saveData();
	}
}
执行过程:
Object data = "数据";
PersistentDB persistentDB = new PersistentDB();
PersistentFile persistentFile = new PersistentFile();
Midiator midiator = new Midiator();
midiator.setPersistentDB(persistentDB)
		.setPersistentFile(persistentFile);
persistentDB.getData(data, midiator);
persistentFile.getData(data, midiator);
执行结果:
数据 已保存到数据库
数据 已保存到文件
数据 已保存到文件
数据 已保存到数据库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式中的行为模式共有11种,它们分别是策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。这些行为模式涉及到对象之间的交互和通信,用于解决不同对象之间的行为问题。其中,策略模式用于封装一系列的算法,让算法可以动态切换;模板方法模式用于定义算法的骨架,具体的实现由子类决定;观察者模式用于定义对象之间的一对多的依赖关系,当一个对象状态发生改变时,所有依赖该对象的对象都会收到通知;迭代器模式用于遍历集合对象的元素,而不暴露集合的内部结构;任链模式用于将请求的发送者和接收者解耦,每个接收者都可以选择处理请求或者将请求传递给下一个接收者;命令模式用于将请求封装成对象,从而可以更灵活地进行参数化和传递;备忘录模式用于保存和恢复对象的状态,以便在需要时可以回滚到之前的状态;状态模式用于根据对象的内部状态改变其行为;访问者模式用于将数据结构和操作分离,从而可以在不修改数据结构的情况下定义新的操作;中介者模式用于解耦多个对象之间的交互,使得各个对象可以独立地改变其行为;解释器模式用于定义一种语言的文法,并解释语言中的表达式。这些行为模式可以在不同场景下使用,根据具体的需求选择合适的模式来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值