中介者模式

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();
		
	}

 优点:

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

缺点:

中介者会很复杂。

使用场景:

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

posted on 2015-10-10 14:32  lastView  阅读(140)  评论(0)    收藏  举报

导航