中介者模式

public static  abstract class Mediator{
		
		
		protected Colleague1 colleague1;
		protected Colleague2 colleague2;
		
		
		
		public Colleague1 getColleague1() {
			return colleague1;
		}



		public void setColleague1(Colleague1 colleague1) {
			this.colleague1 = colleague1;
		}



		public Colleague2 getColleague2() {
			return colleague2;
		}



		public void setColleague2(Colleague2 colleague2) {
			this.colleague2 = colleague2;
		}
		
		public abstract void doSomething();
	}
	
	public static class ConcrectMediator extends Mediator{

		@Override
		public void doSomething() {
			//中介者中一般只调用自己的方法
			colleague1.doSomethingSelf();
			
			colleague2.doSomethingSelf();
			
		}
		
	}
	
	public static  abstract class Colleague{
		protected Mediator mediator;

		public Colleague(Mediator mediator){
			this.mediator = mediator;
		}
	}
	
	public static  class Colleague1 extends Colleague{

		public Colleague1(Mediator mediator) {
			super(mediator);
		}
		
		public void doSomethingSelf(){
			System.out.println("c1 doSomethingSelf");
		}
		
		public void doSomethingMedia(){
			this.mediator.doSomething();
		}
		
	}
	
	public static class Colleague2 extends Colleague{

		public Colleague2(Mediator mediator) {
			super(mediator);
		}
		
		public void doSomethingSelf(){
			System.out.println("c2 doSomethingSelf");
		}
		
		public void doSomethingMedia(){
			this.mediator.doSomething();
		}
		
	}
	
	public static void main(String[] args){
		ConcrectMediator mediator = new ConcrectMediator();
		Colleague1 c1 = new Colleague1(mediator);
		Colleague2 c2 = new Colleague2(mediator);
		
		mediator.setColleague1(c1);
		mediator.setColleague2(c2);
		
		c1.doSomethingSelf();
		c1.doSomethingMedia();
		
		c2.doSomethingSelf();
		c2.doSomethingMedia();
		
	}

 优点:

减少类的依赖,把一对多的依赖变成一对一,降低了类的耦合。

缺点:

中介者会很复杂。

使用场景:

看多个对象的耦合程度:在类图中出现了蜘蛛网的结构,考虑使用中介者模式来优化类图。

转载于:https://www.cnblogs.com/wangqian-easy/p/4866809.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值