中介者模式 小鱼儿 2022-07-28 09:00 21阅读 0赞 **一、什么是中介者模式** Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。 **二、应用场景** 1 当一组对象要进行沟通或者业务上的交互,但是其关系却又很复杂混乱时,可以采用此模式。 2 当一个对象与其他的对象要进行紧密的交互,但又想服用该对象而不依赖其他的对象时。 3 想创造一个运行于多个类之间的对象,又不想生成新的子类时。 **三、中介者模式的结构(**模式意图) ![Image 1][]使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合。 这个中介者常常起着**中间桥梁**的作用,使其他的对象可以利用中介者完成某些行为活动,因此它必须对所有的参与活动的对象了如指掌! **四、中介者模式的角色和职责** mediator 中介者类的抽象父类。 concreteMediator 具体的中介者类。 colleague 关联类的抽象父类。 concreteColleague 具体的关联类。 **五、中介者模式的优点** 1. 将系统按功能分割成更小的对象,符合类的最小设计原则 2. 对关联对象的集中控制 3. 减小类的耦合程度,明确类之间的相互关系:当类之间的关系过于复杂时,其中任何一个类的修改都会影响到其他类,不符合类的设计的开闭原则 ,而Mediator模式将原来相互依存的多对多的类之间的关系简化为Mediator控制类与其他关联类的一对多的关系,当其中一个类修改时,可以对其他关联类不产生影响(即使有修改,也集中在Mediator控制类)。 4. 有利于提高类的重用性 **未运用中介模式前的实现:** **\[java\]** [ view plain][view plain] [ copy][view plain] [ print][view plain] [?][view plain] 1. Person.java 2. package com.ibeifeng.ex1; 3. 4. public abstract class Person \{ 5. private String name; 6. private int condition; 7. 8. public Person(String name, int condition) \{ 9. this.name = name; 10. this.condition = condition; 11. \} 12. 13. public String getName() \{ 14. return name; 15. \} 16. public void setName(String name) \{ 17. this.name = name; 18. \} 19. public int getCondition() \{ 20. return condition; 21. \} 22. 23. public void setCondition(int condition) \{ 24. this.condition = condition; 25. \} 26. 27. public abstract void getPartner(Person person); 28. 29. \} 30. Man.java 31. package com.ibeifeng.ex1; 32. 33. public class Man extends Person \{ 34. 35. public Man(String name, int condition) \{ 36. super(name, condition); 37. \} 38. 39. public void getPartner(Person person) \{ 40. if(person instanceof Man) \{ 41. System.out.println("汗,我不是同性恋!"); 42. \} else \{ 43. if(this.getCondition() == person.getCondition()) \{ 44. System.out.println(this.getName() + "和" + person.getName() + "绝配"); 45. \} else \{ 46. System.out.println(this.getName() + "和" + person.getName() + "不相配"); 47. \} 48. \} 49. \} 50. 51. \} 52. Woman.java 53. package com.ibeifeng.ex1; 54. 55. public class Woman extends Person \{ 56. 57. public Woman(String name, int condition) \{ 58. super(name, condition); 59. \} 60. 61. public void getPartner(Person person) \{ 62. if(person instanceof Woman) \{ 63. System.out.println("汗,我不是同性恋!"); 64. \} else \{ 65. if(this.getCondition() == person.getCondition()) \{ 66. System.out.println(this.getName() + "和" + person.getName() + "绝配"); 67. \} else \{ 68. System.out.println(this.getName() + "和" + person.getName() + "不相配"); 69. \} 70. \} 71. \} 72. 73. \} 74. MainClass.java 75. package com.ibeifeng.ex1; 76. 77. public class MainClass \{ 78. public static void main(String\[\] args) \{ 79. Person zhangsan = new Man("张三",5); 80. Person lisi = new Man("李四",6); 81. 82. Person xiaofang = new Woman("小芳", 6); 83. 84. zhangsan.getPartner(xiaofang); 85. lisi.getPartner(xiaofang); 86. zhangsan.getPartner(lisi); 87. 88. \} 89. \} Person.java package com.ibeifeng.ex1; public abstract class Person { private String name; private int condition; public Person(String name, int condition) { this.name = name; this.condition = condition; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getCondition() { return condition; } public void setCondition(int condition) { this.condition = condition; } public abstract void getPartner(Person person); } Man.java package com.ibeifeng.ex1; public class Man extends Person { public Man(String name, int condition) { super(name, condition); } public void getPartner(Person person) { if(person instanceof Man) { System.out.println("汗,我不是同性恋!"); } else { if(this.getCondition() == person.getCondition()) { System.out.println(this.getName() + "和" + person.getName() + "绝配"); } else { System.out.println(this.getName() + "和" + person.getName() + "不相配"); } } } } Woman.java package com.ibeifeng.ex1; public class Woman extends Person { public Woman(String name, int condition) { super(name, condition); } public void getPartner(Person person) { if(person instanceof Woman) { System.out.println("汗,我不是同性恋!"); } else { if(this.getCondition() == person.getCondition()) { System.out.println(this.getName() + "和" + person.getName() + "绝配"); } else { System.out.println(this.getName() + "和" + person.getName() + "不相配"); } } } } MainClass.java package com.ibeifeng.ex1; public class MainClass { public static void main(String[] args) { Person zhangsan = new Man("张三",5); Person lisi = new Man("李四",6); Person xiaofang = new Woman("小芳", 6); zhangsan.getPartner(xiaofang); lisi.getPartner(xiaofang); zhangsan.getPartner(lisi); } } **运用了中介模式的代码:** **\[java\]** [ view plain][view plain] [ copy][view plain] [ print][view plain] [?][view plain] 1. Person.java 2. package com.ibeifeng.ex2; 3. 4. public abstract class Person \{ 5. private String name; 6. private int condition; 7. private Mediator mediator; 8. 9. 10. public Person(String name, int condition, Mediator mediator) \{ 11. super(); 12. this.name = name; 13. this.condition = condition; 14. this.mediator = mediator; 15. \} 16. 17. public Mediator getMediator() \{ 18. return mediator; 19. \} 20. 21. public void setMediator(Mediator mediator) \{ 22. this.mediator = mediator; 23. \} 24. 25. public String getName() \{ 26. return name; 27. \} 28. public void setName(String name) \{ 29. this.name = name; 30. \} 31. public int getCondition() \{ 32. return condition; 33. \} 34. 35. public void setCondition(int condition) \{ 36. this.condition = condition; 37. \} 38. 39. public abstract void getPartner(Person person); 40. 41. \} 42. Mediator.java 43. package com.ibeifeng.ex2; 44. 45. public class Mediator \{ 46. private Man man; 47. private Woman woman; 48. 49. public void setMan(Man man) \{ 50. this.man = man; 51. \} 52. public void setWoman(Woman woman) \{ 53. this.woman = woman; 54. \} 55. 56. public void getPartner(Person person) \{ 57. //将搭档设置上 58. if(person instanceof Man) \{ 59. this.setMan((Man)person); 60. \} else \{ 61. this.setWoman((Woman)person); 62. \} 63. //判断条件 64. if(man == null || woman == null) \{ 65. System.out.println("汗,我不是同性恋!"); 66. \} else \{ 67. 68. if(man.getCondition() == woman.getCondition()) \{ 69. System.out.println(man.getName() + "和" + woman.getName() + "绝配"); 70. \} else \{ 71. System.out.println(man.getName() + "和" + woman.getName() + "不相配"); 72. \} 73. \} 74. \} 75. 76. \} 77. Man.java 78. package com.ibeifeng.ex2; 79. 80. public class Man extends Person \{ 81. 82. public Man(String name, int condition,Mediator mediator) \{ 83. super(name, condition, mediator); 84. \} 85. 86. public void getPartner(Person person) \{ 87. this.getMediator().setMan(this); 88. this.getMediator().getPartner(person); 89. \} 90. \} 91. Woman.java 92. package com.ibeifeng.ex2; 93. 94. public class Woman extends Person \{ 95. 96. public Woman(String name, int condition,Mediator mediator) \{ 97. super(name, condition, mediator); 98. \} 99. 100. public void getPartner(Person person) \{ 101. this.getMediator().setWoman(this); 102. this.getMediator().getPartner(person); 103. \} 104. 105. \} 106. MainClass.java 107. package com.ibeifeng.ex2; 108. public class MainClass \{ 109. public static void main(String\[\] args) \{ 110. Mediator mediator = new Mediator(); 111. Person zhangsan = new Man("张三",7,mediator); 112. Person lisi = new Man("李四",7,mediator); 113. Person xiaofang = new Woman("小芳",7,mediator); 114. 115. zhangsan.getPartner(lisi); 116. 117. xiaofang.getPartner(lisi); 118. \} 119. \} [Image 1]: [view plain]: http://blog.csdn.net/liuwenbo0920/article/details/7275911#
相关 java 中介者模式_java中介者模式 中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和 小咪咪/ 2022年11月06日 10:50/ 0 赞/ 166 阅读
相关 中介者模式 一、什么是中介者模式 Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediat 小鱼儿/ 2022年07月28日 09:00/ 0 赞/ 22 阅读
相关 中介者模式 中介者模式 一、概述 1. 如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系极其复杂,这些对象称为同事对象 2. 我们可以引入 曾经终败给现在/ 2022年04月18日 06:29/ 0 赞/ 203 阅读
相关 中介者模式 > 中介者模式适用于,完成一件事情,需要多方面协同合作,而多方面之间的耦合性较紧密 有一个场景 采购部门要采购IBM的电脑,它根据以下两个要素来决定采购数量。 销售 Love The Way You Lie/ 2022年03月14日 15:42/ 0 赞/ 233 阅读
相关 中介者模式 ![1365950-20190529141650092-1838345438.png][] / 中介者模式:中介在生活中是很常见的,如房屋中介,使用了中介 柔光的暖阳◎/ 2021年12月21日 12:25/ 0 赞/ 248 阅读
相关 中介者模式 中介者模式:调停者模式 定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要相互引用,从而使其耦合松散,还可以独立地改变它们之间的交互。 中介者的职责:中转作用 不念不忘少年蓝@/ 2021年12月17日 13:55/ 0 赞/ 201 阅读
相关 中介者模式 一、前言 中介模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 妖狐艹你老母/ 2021年12月09日 00:53/ 0 赞/ 223 阅读
相关 中介者模式 中介者模式:用一个对象来封装一系列对象的交互。中介者使各对象不需要显示的相互引用,从而使得耦合松散,而且可以独立的改变他们之间的交互。 主要解决:对象与对象之间存在大量的关联 ゞ 浴缸里的玫瑰/ 2021年09月17日 04:42/ 0 赞/ 246 阅读
相关 中介者模式 22.中介者模式 public abstract class AbstractCardPartner// 抽象牌友类 { 分手后的思念是犯贱/ 2021年09月17日 00:08/ 0 赞/ 299 阅读
相关 中介者模式 一 点睛 一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如 悠悠/ 2021年07月24日 21:38/ 0 赞/ 369 阅读
还没有评论,来说两句吧...