中介设计模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。、

优点: 1、降低了类的复杂度,将一对多转化成了一对一。 2、各个类之间的解耦。 3、符合迪米特原则。
缺点:中介者会庞大,变得复杂难以维护。

使用场景: 1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。 2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

/**
 * 抽象电话类
 * @author XXJ
 *
 * 2019年3月2日 下午4:45:24
 */
public abstract class AbstractTelephone {
	protected String number;
	protected boolean flag;
	
	public AbstractTelephone(String number){
		this.number = number;
		this.flag = false;
	}

	//拨号
	public abstract void call(String number,Mediator mediator);
	
	//收到电话
	public abstract void get(String number);

	/**
	 * @return the number
	 */
	public String getNumber() {
		return number;
	}

	/**
	 * @param number the number to set
	 */
	public void setNumber(String number) {
		this.number = number;
	}

	/**
	 * @return the flag
	 */
	public boolean isFlag() {
		return flag;
	}

	/**
	 * @param flag the flag to set
	 */
	public void setFlag(boolean flag) {
		this.flag = flag;
	}

	
}

public class TelephoneA extends AbstractTelephone {

	

	
	public TelephoneA(String number){
		super(number);
	}
	
	@Override
	public void call(String number,Mediator mediator) {
		System.out.println(super.number+">>打电话给>>"+number);
		mediator.changeNumberB();

	}

	@Override
	public void get(String number) {
		System.out.println(super.number+"<<收到号码<<" + number);

	}



	
}
public class TelephoneB extends AbstractTelephone {

	

	
	public TelephoneB(String number){
		super(number);
	}
	
	@Override
	public void call(String number,Mediator mediator) {
		System.out.println(super.number+">>打电话给>>"+number);
		mediator.changeNumberA();

	}

	@Override
	public void get(String number) {
		System.out.println(super.number+"<<收到号码<<" + number);

	}



	
}

中介类也可以抽象出来,也可以省略,我这里省略了这一步。

/**
 * 中介类
 * @author XXJ
 *
 * 2019年3月2日 下午4:48:28
 */
public class Mediator {
	
	private AbstractTelephone a;
	private AbstractTelephone b;
	
	public Mediator(AbstractTelephone a,AbstractTelephone b){
		this.a = a;
		this.b = b;
	}
	
	
	public void changeNumberA(){
		if (a.isFlag()) {
			System.out.println(a.getNumber()+"在通话中,请稍后再拨...");
			return;
		}else{
			a.get(b.getNumber());
			b.setFlag(true);
			a.setFlag(true);
		}
	}
	
	
	public void changeNumberB(){
		if (b.isFlag()) {
			System.out.println(b.getNumber()+"在通话中,请稍后再拨...");
			return;
		}else{
			b.get(a.getNumber());
			a.setFlag(true);
			b.setFlag(true);
		}
	}

}
public class Test {

	public static void main(String[] args) {
		AbstractTelephone pa = new TelephoneA("13544332344");
		AbstractTelephone pb = new TelephoneB("13454442323");
		Mediator mediator = new Mediator(pa, pb);
		
		pa.call("13454442323", mediator);
		

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值