大话设计模式之中介者模式

中介者模式:
又叫调停者模式,其实就是中间人或者调停者地意思。
 尽管将一个系统分割成许多 对象通常可以增加其可复用性,但是对象间 相互连接 地 激增 又会降低其可复用性。因为大量地连接使得
一个对象不可能在没有其他对象地支持下工作,系统表现为一个不可分割地整体,所以,对系统地行为进行任何较大地改动就十分困难了。


定义中介者模式:
用一个中介对象来封装一系列地对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间地交互。

/**
 * 抽象同事类
 * */
abstract class Colleague {

	protected Mediator mediator;
//	构造方法,得到中介者对象
	public Colleague(Mediator mediator) {
		this.mediator=mediator;
	}
}
/**
 * 抽象中介者类
 * 1.定义一个抽象地发送消息方法,得到同事对象和发送信息
 * 2.定义了同事对象到中介者对象地接口
 * */
abstract class Mediator {

	public abstract void send(String message,Colleague colleague);
}
/**
 * 具体同事类,每个具体同事只知道自己地行为,而不了解其他同事类
 * 地情况,但是它们却都认识中介者对象。
 * */
public class ConcreteColleagueA extends Colleague{

	public ConcreteColleagueA(Mediator mediator) {
		super(mediator);
		// TODO Auto-generated constructor stub
	}
 public void send(String message) {
//	 发送消息通常是中介者发送出的。
	 mediator.send(message, this);
 }
 public void notify(String message) {
	 System.out.println("同事1得到信息:"+message);
 }
}
/**
 * 具体同事类,每个具体同事只知道自己地行为,而不了解其他同事类
 * 地情况,但是它们却都认识中介者对象。
 * */
public class ConcreteColleagueB extends Colleague{

	public ConcreteColleagueB(Mediator mediator) {
		super(mediator);
		// TODO Auto-generated constructor stub
	}
 public void send(String message) {
//	 发送消息通常是中介者发送出的。
	 mediator.send(message, this);
 }
 public void notify(String message) {
	 System.out.println("同事2得到信息:"+message);
 }
}
/**
 * 具体中介者对象,实现抽象类地方法,他需要知道所有具体同事类,
 * 并且从具体同事接收消息,向具体同事对象发出命令。
 *
 * */
public class ConcreteMediator extends Mediator{
	
	private ConcreteColleagueA collA;
	private ConcreteColleagueB collB;

// 需要了解所有地具体同事对象
	public void setCollA(ConcreteColleagueA collA) {
		this.collA = collA;
	}


	public void setCollB(ConcreteColleagueB collB) {
		this.collB = collB;
	}
// 重写发送信息地方法,根据对象作出选择判断,通知对象
 	@Override
	public void send(String message, Colleague colleague) {
		// TODO Auto-generated method stub
		if (colleague==collA) {
			collB.notify(message);
		}
		
		else {
			collA.notify(message);
		}
	}

}
/**
 * 客户端
 * 由于有了 中介,A和B对象 在发送消息和接收消息 信息时其实是通过中介者完成地,这样就减少了它们之间地耦合度
 * 
 * 1.从实现地代码来看,ConcreteMediator(中介者对象)可能会因为对象地增多,而变得非常复杂,不容易维护了。
 * 2.确实,由于ConcreteMediator(中介者对象)控制了集中化,于是就把交互复杂性变为了中介者地复杂性,这就使得
 * 中介者会变得比任何一个 对象复杂。因此,中介者模式地优点来源于集中控制,其缺点也是它。
 * 中介者模式一般 应用于:
 * 一组对象以定义 良好(这组对象已经定义好了),但是复杂地方式进行通信地场合。以及想定制一个分布在多个类
 * 中地行为。而又不想生成太多地子类地场合
 * 
 * */
public class Test {

	 public static void main(String[] args) {
//		 中介者对象
		ConcreteMediator concreteMediator = new ConcreteMediator();
//		让两个具体同事类认识中介者对象
		ConcreteColleagueA concreteColleagueA = new ConcreteColleagueA(concreteMediator);
		ConcreteColleagueB concreteColleagueB = new ConcreteColleagueB(concreteMediator);
//		让中介者认识各个具体同事类对象
		concreteMediator.setCollA(concreteColleagueA);
		concreteMediator.setCollB(concreteColleagueB);
//	具体同事类对象地发送信息都是通过中介者转发
		concreteColleagueA.send("锦锦,你吃饭了吗");
		concreteColleagueB.send("没有,等你请客呢");
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值