中介者模式

概念

  说起中介者模式,就想起平时买房和租房的时候的中介,还有聊天室,中介者模式就和这些很像。我们靠一个中介者来处理类与类之间的交互关系。

角色

抽象中介者角色:定义了交互方式。
具体中介者角色:实现了交互方式。
抽象“对象类”:定义通用的操作。
具体“对象类”:实现抽象"对象"类。

上代码

  就模拟一下聊天室聊天的代码,这里聊天室就是一个中介者类,因为大家都可以在里面讲话。这个例子比较简单,我就没有写抽象中介者类

具体中介者类

  因为要处理对象间的关系,所以他必须持有各对象的引用。而我写的sayToX方法,其实可以统一成一个方法,但这样就需要添加if…else…判断了,所以这也暴露了中介者模式的缺点。

public class ChartRoom {
	
	private UserA userA;
	private UserB userB;
	
	public void setUserA(UserA userA) {
		this.userA = userA;
	}

	public void setUserB(UserB userB) {
		this.userB = userB;
	}

	public void sayToB(String msg){
		userB.getMsg(msg);
	}
	
	public void sayToA(String msg){
		userA.getMsg(msg);
	}
	
}
抽象 对象 类

  拥有发送消息和接收消息的方法

public interface User {
	
	/**
	 * 发送消息
	 */
	void say(ChartRoom chart);
	
	/**
	 * 接收消息
	 */
	void getMsg(String msg);
}

具体 对象 类
public class UserA implements User{

	@Override
	public void say(ChartRoom chart) {
		chart.sayToB("Hello I'm A");
	}

	@Override
	public void getMsg(String msg) {
		System.out.println("A got Msg:"+msg);
	}

}


public class UserB implements User {
	
	@Override
	public void say(ChartRoom chart) {
		chart.sayToA("hello I'm B");
	}

	@Override
	public void getMsg(String msg) {
		System.out.println("B got msg:"+msg);
	}

}

模拟的客户端类

public class MediumClient {
	public static void main(String[] args) {
		System.out.println("初始化聊天室");
		ChartRoom chartRoom = new ChartRoom();
		UserA userA = new UserA();
		UserB userB = new UserB();
		
		chartRoom.setUserA(userA);
		System.out.println("A 加入聊天室");
		chartRoom.setUserB(userB);
		System.out.println("B 加入聊天室");
		
		userA.say(chartRoom);
		userB.say(chartRoom);
	}
}

结果

The End

  其实看了上面的代码,中介者模式的优缺点也表现的很明显了。这里再说一下,年底要考

优点
  1、降低了类的复杂度,将一对多转化成了一对一。
  2、各个类之间的解耦。
  3、符合迪米特原则。

缺点
  中介者会十分十分庞大,毕竟处理都是在中介者里面弄的。

所以什么时候使用呢,当然是当类与类的交互变的复杂的时候了,把他们从1对多转化成1对1,看着就瞬间清爽了。

好了,over。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值