当前位置:   article > 正文

设计模式之中介者模式讲解

设计模式之中介者模式讲解

概念:也称为调停者模式。用一个中介者对象封装一系列对象的交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

  • 抽象中介者:定义中介者的操作。
  • 具体中介者:实现抽象中介者定义的操作,并持有被调停者对象。
  • 抽象被调停者:定义被调停者的操作。
  • 具体被调停者:实现具体操作,通过中介者进行交互。

以下用一个同事之间沟通的例子来帮助大家理解。

  1. public interface Mediator {
  2. void changed(Colleague colleague);
  3. void register(Colleague colleague);
  4. }
  5. public interface Colleague {
  6. void send(String message);
  7. void receive(String message);
  8. }
  9. public class ConcreteMediator implements Mediator {
  10. private List<Colleague> colleagues = new ArrayList<>();
  11. public void register(Colleague colleague) {
  12. colleagues.add(colleague);
  13. }
  14. @Override
  15. public void changed(Colleague colleague) {
  16. // 假设每个同事收到消息后都向所有其他同事发送消息
  17. for (Colleague c : colleagues) {
  18. if (!c.equals(colleague)) {
  19. c.receive("Message from " + colleague.getClass().getSimpleName());
  20. }
  21. }
  22. }
  23. }
  24. public class ConcreteColleagueA implements Colleague {
  25. private Mediator mediator;
  26. public ConcreteColleagueA(Mediator mediator) {
  27. this.mediator = mediator;
  28. mediator.register(this);
  29. }
  30. @Override
  31. public void send(String message) {
  32. System.out.println("Colleague A sends: " + message);
  33. mediator.changed(this);
  34. }
  35. @Override
  36. public void receive(String message) {
  37. System.out.println("Colleague A receives: " + message);
  38. }
  39. }
  40. public class ConcreteColleagueB implements Colleague {
  41. private Mediator mediator;
  42. public ConcreteColleagueB(Mediator mediator) {
  43. this.mediator = mediator;
  44. mediator.register(this);
  45. }
  46. @Override
  47. public void send(String message) {
  48. System.out.println("Colleague B sends: " + message);
  49. mediator.changed(this);
  50. }
  51. @Override
  52. public void receive(String message) {
  53. System.out.println("Colleague B receives: " + message);
  54. }
  55. }
  56. public class Demo {
  57. public static void main(String[] args) {
  58. ConcreteMediator mediator = new ConcreteMediator();
  59. Colleague colleagueA = new ConcreteColleagueA(mediator);
  60. Colleague colleagueB = new ConcreteColleagueB(mediator);
  61. colleagueA.send("Hello from A");
  62. colleagueB.send("Hello from B");
  63. }
  64. }

如果大家需要视频版本的讲解,欢迎关注我的B站:

【天哥不爱学习的个人空间-哔哩哔哩】 https://b23.tv/HxwqjXl

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号