设计模式之中介者模式(Mediator)

    中介者模式属于行为型模式,描述了对象之间的一种行为模式。当多个对象之间需要进行通信,而通信过程又比较复杂,此时可以使用中介者模式。用一个中介对象来封装对象之间的一系列的交互,使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们。

    比如现实世界中的租房。如果让房东和房客之间直接进行交互,房东需要四处发放租房信息,而房客也需要四处寻找租房信息,而且需要签订租房合同等等法律条款,过程会比较复杂。但是房屋中介的出现,让二者之间的过程大大简化。房东只需要将租房信息交给中介,而房客也只需要找中介查询租房信息。此时的房屋中介就起到了中介对象的作用。

    中介者类图如下:


      


对应的代码如下:

Mediator.java

package mediator;

public abstract class Mediator {
	protected Person mRentor;
	protected Person mLandLord;
	
	public abstract void setRentor(Person person);
	
	public abstract void setLandLord(Person person);
	
	public abstract void send(final String message, Person person);
}

HouseMediator.java
package mediator;

public class HouseMediator extends Mediator {

	@Override
	public void setRentor(Person person) {
		// TODO Auto-generated method stub
		mRentor = person;
	}

	@Override
	public void setLandLord(Person person) {
		// TODO Auto-generated method stub
		mLandLord = person;
	}

	@Override
	public void send(String message, Person person) {
		// TODO Auto-generated method stub
		if(person == mRentor){
			mLandLord.getMessage(message);
		}else if(person == mLandLord){
			mRentor.getMessage(message);
		}else{
			System.out.println("Unknown person");
		}
	}
}

Person.java
package mediator;

public abstract class Person {
	protected Mediator mMediator;
	
	public void setMediator(Mediator mediator){
		mMediator = mediator;
	}
	
	public abstract void sendMessage(final String message);
	
	public abstract void getMessage(final String message);
}

Renter.java
package mediator;

public class Rentor extends Person {

	@Override
	public void sendMessage(String message) {
		// TODO Auto-generated method stub
		mMediator.send(message, this);
	}

	@Override
	public void getMessage(String message) {
		// TODO Auto-generated method stub
		System.out.println("Rentor get message: " + message);
	}

}

LandLord.java
package mediator;

public class LandLord extends Person {

	@Override
	public void sendMessage(String message) {
		// TODO Auto-generated method stub
		mMediator.send(message, this);
	}

	@Override
	public void getMessage(String message) {
		// TODO Auto-generated method stub
		System.out.println("LandLord get message: " + message);
	}

}

Main.java

package mediator;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Mediator mediator = new HouseMediator();
		Person rentor = new Rentor();
		Person landlord = new LandLord();
		
		mediator.setRentor(rentor);
		mediator.setLandLord(landlord);
		
		rentor.setMediator(mediator);
		
		landlord.setMediator(mediator);
		
		rentor.sendMessage("I would like to rent a house");
		
		landlord.sendMessage("I would like to land a house");
	}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值