一、什么是中介者模式
Mediator模式也叫中介者模式,是由GoF提出的23种 软件设计模式的一种。Mediator模式是行为模式之一, 在Mediator模式中,类之间的交互行为被统一放在 Mediator的对象中,对象通过Mediator对象同其他对象 交互,Mediator对象起着控制器的作用。
二、中介者模式的结构
三、中介者模式的角色和职责
mediator 中介者类的抽象父类。
concreteMediator 具体的中介者类。
colleague 关联类的抽象父类。
concreteColleague 具体的关联类。
四、中介者模式的优点
1,将系统按功能分割成更小的对象,符合类的最小设计原则
2,对关联对象的集中控制
3,减小类的耦合程度,明确类之间的相互关系:当类之间的关系过于复杂时,其中任何一个类的修改都会影响到其他类,不符合类的设计的开闭原则 ,而Mediator模式将原来相互依存的多对多的类之间的关系简化为Mediator控制类与其他关联类的一对多的关系,当其中一个类修改时,可以对其他关联类不产生影响(即使有修改,也集中在Mediator控制类)。
4,有利于提高类的重用性
eg1:
人
1 public abstract class Person { 2 private String name; 3 private int condition; 4 5 public Person(String name, int condition) { 6 this.name = name; 7 this.condition = condition; 8 } 9 10 public String getName() { 11 return name; 12 } 13 public void setName(String name) { 14 this.name = name; 15 } 16 public int getCondition() { 17 return condition; 18 } 19 20 public void setCondition(int condition) { 21 this.condition = condition; 22 } 23 24 public abstract void getPartner(Person person); 25 26 }
男人
1 public class Man extends Person { 2 3 public Man(String name, int condition) { 4 super(name, condition); 5 } 6 7 public void getPartner(Person person) { 8 if(person instanceof Man) { 9 System.out.println("汗,我不是同性恋!"); 10 } else { 11 if(this.getCondition() == person.getCondition()) { 12 System.out.println(this.getName() + "和" + person.getName() + "绝配"); 13 } else { 14 System.out.println(this.getName() + "和" + person.getName() + "不相配"); 15 } 16 } 17 } 18 }
女人
1 public class Woman extends Person { 2 3 public Woman(String name, int condition) { 4 super(name, condition); 5 } 6 7 public void getPartner(Person person) { 8 if(person instanceof Woman) { 9 System.out.println("汗,我不是同性恋!"); 10 } else { 11 if(this.getCondition() == person.getCondition()) { 12 System.out.println(this.getName() + "和" + person.getName() + "绝配"); 13 } else { 14 System.out.println(this.getName() + "和" + person.getName() + "不相配"); 15 } 16 } 17 } 18 }
测试
1 public class MainClass { 2 public static void main(String[] args) { 3 Person zhangsan = new Man("张三",5); 4 Person lisi = new Man("李四",6); 5 6 Person xiaofang = new Woman("小芳", 6); 7 8 zhangsan.getPartner(xiaofang);//获取同伴 9 lisi.getPartner(xiaofang); 10 zhangsan.getPartner(lisi); 11 12 } 13 }
=========================================================================
eg2:
人
1 public abstract class Person { 2 private String name; 3 private int condition; //条件 4 private Mediator mediator; //调解人,中介 5 6 7 public Person(String name, int condition, Mediator mediator) { 8 super(); 9 this.name = name; 10 this.condition = condition; 11 this.mediator = mediator; 12 } 13 14 public Mediator getMediator() { 15 return mediator; 16 } 17 18 public void setMediator(Mediator mediator) { 19 this.mediator = mediator; 20 } 21 22 public String getName() { 23 return name; 24 } 25 public void setName(String name) { 26 this.name = name; 27 } 28 public int getCondition() { 29 return condition; 30 } 31 32 public void setCondition(int condition) { 33 this.condition = condition; 34 } 35 36 public abstract void getPartner(Person person); 37 38 }
中介物
1 //调解人,中介物 2 public class Mediator { 3 private Man man; 4 private Woman woman; 5 6 public void setMan(Man man) { 7 this.man = man; 8 } 9 public void setWoman(Woman woman) { 10 this.woman = woman; 11 } 12 13 public void getPartner(Person person) { 14 //将搭档设置上 15 if(person instanceof Man) { 16 this.setMan((Man)person); 17 } else { 18 this.setWoman((Woman)person); 19 } 20 //判断条件 21 if(man == null || woman == null) { 22 System.out.println("汗,我不是同性恋!"); 23 } else { 24 25 if(man.getCondition() == woman.getCondition()) { 26 System.out.println(man.getName() + "和" + woman.getName() + "绝配"); 27 } else { 28 System.out.println(man.getName() + "和" + woman.getName() + "不相配"); 29 } 30 } 31 } 32 }
男人
1 public class Man extends Person { 2 3 public Man(String name, int condition,Mediator mediator) { 4 super(name, condition, mediator); 5 } 6 7 public void getPartner(Person person) { 8 this.getMediator().setMan(this); 9 this.getMediator().getPartner(person); 10 } 11 }
女人
1 public class Woman extends Person { 2 3 public Woman(String name, int condition,Mediator mediator) { 4 super(name, condition, mediator); 5 } 6 7 public void getPartner(Person person) { 8 this.getMediator().setWoman(this); 9 this.getMediator().getPartner(person); 10 } 11 }
测试
1 public class MainClass { 2 public static void main(String[] args) { 3 Mediator mediator = new Mediator(); 4 Person zhangsan = new Man("张三",7,mediator); 5 Person lisi = new Man("李四",7,mediator); 6 Person xiaofang = new Woman("小芳",7,mediator); 7 8 zhangsan.getPartner(lisi); 9 10 xiaofang.getPartner(lisi); 11 } 12 }