中介者模式

文档查阅说明:

Tongkey

yiibai

runoob

大话设计模式

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

使用场景:

● 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象;

● 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类;

● 中介者模式适用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网状结构,即每个类都与其他的类有直接的联系

public abstract class Madiator {
	public abstract void send(String message, Colleague colleague);
}
public abstract class Colleague {
	private Madiator madiator;
	
	public Colleague(Madiator madiator) {
		super();
		this.madiator = madiator;
	}

	public Madiator getMadiator() {
		return madiator;
	}

	public void setMadiator(Madiator madiator) {
		this.madiator = madiator;
	}
	
	public abstract void send(String message);
	
	public abstract void notify(String message);
}
public class ConCreateColleagueA extends Colleague {

	public ConCreateColleagueA(Madiator madiator) {
		super(madiator);
	}

	@Override
	public void send(String message) {
		this.getMadiator().send(message, this);
	}

	@Override
	public void notify(String message) {
		System.out.println("同事A收到消息:"+message);
	}
	
}
public class ConCreateColleagueB extends Colleague {

	public ConCreateColleagueB(Madiator madiator) {
		super(madiator);
	}

	@Override
	public void send(String message) {
		this.getMadiator().send(message, this);
	}

	@Override
	public void notify(String message) {
		System.out.println("同事B收到消息:"+message);
	}
	
}
public class ConCreateMadiator extends Madiator {

	private ConCreateColleagueA colleagueA;
	private ConCreateColleagueB colleagueB;
	
	public ConCreateColleagueA getColleagueA() {
		return colleagueA;
	}

	public void setColleagueA(ConCreateColleagueA colleagueA) {
		this.colleagueA = colleagueA;
	}
	
	public ConCreateColleagueB getColleagueB() {
		return colleagueB;
	}

	public void setColleagueB(ConCreateColleagueB colleagueB) {
		this.colleagueB = colleagueB;
	}

	@Override
	public void send(String message, Colleague colleague) {
		if(colleague == colleagueA) {
			colleagueB.notify(message);
		}else {
			colleagueA.notify(message);
		}
	}

}
public class Test {
	public static void main(String[] args) {
		ConCreateMadiator madiator = new ConCreateMadiator();
		
		ConCreateColleagueA colleagueA = new ConCreateColleagueA(madiator);
		ConCreateColleagueB colleagueB = new ConCreateColleagueB(madiator);
		
		madiator.setColleagueA(colleagueA);
		madiator.setColleagueB(colleagueB);
		
		colleagueA.send("吃饭了没!");
		colleagueB.send("还没,你请?");
		
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值