17中介者模式Mediator

一、什么是中介者模式

  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 }
原文地址:https://www.cnblogs.com/justdoitba/p/9034415.html