设计模式一中介者模式


欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot




概述
   主要是通过中介对象来封装对象之间的关系
  同时通过引用中介者对象来减少系统对象之间关系,提高了对象的可复用和系统的可扩展性。

抽象中介者(Mediator)角色:
  它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
具体中介者(ConcreteMediator)角色:
  实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
抽象同事类(Colleague)角色:
  定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
具体同事类(Concrete Colleague)角色:
  是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
 1 import java.util.ArrayList;
 2 
 3 public class Mediator {
 4     public static void main(String[] args) {
 5         Mediatoring q = new ConcreteMediator();
 6         Colleague a = new ConcreteColleague1();
 7         Colleague b = new ConcreteColleague2();
 8         q.register(a);
 9         q.register(b);
10         a.retransmission();
11     }
12 }
13 
14 //抽象中介者
15 abstract class Mediatoring {
16     //注册会员
17     public abstract void register(Colleague colleague);
18 
19     //通知
20     public abstract void notify(Colleague cl); //转发
21 }
22 
23 //具体中介者
24 class ConcreteMediator extends Mediatoring {
25 
26     //会员
27     private ArrayList<Colleague> arr = new ArrayList<Colleague>();
28 
29     @Override
30     public void register(Colleague colleague) {
31         if (!arr.contains(colleague)) {
32             arr.add(colleague);
33             colleague.setMdiatoring(this);
34         }
35     }
36 
37     @Override
38     public void notify(Colleague cl) {
39         for (Colleague co : arr) {
40             if (!co.equals(cl)) {
41                 co.response();
42             }
43         }
44     }
45 }
46 
47 //抽象会员
48 abstract class Colleague {
49     //中介
50     private Mediatoring mdiatoring;
51 
52     public Mediatoring getMdiatoring() {
53         return mdiatoring;
54     }
55 
56     public void setMdiatoring(Mediatoring mdiatoring) {
57         this.mdiatoring = mdiatoring;
58     }
59 
60     //转发
61     public abstract void retransmission();
62 
63     //回应
64     public abstract void response();
65 }
66 
67 //具体会员
68 class ConcreteColleague1 extends Colleague {
69 
70     @Override
71     public void retransmission() {
72         getMdiatoring().notify(this);
73     }
74 
75     @Override
76     public void response() {
77         System.out.println("一号收到");
78     }
79 }
80 
81 class ConcreteColleague2 extends Colleague {
82 
83     @Override
84     public void retransmission() {
85         getMdiatoring().notify(this);
86     }
87 
88     @Override
89     public void response() {
90         System.out.println("二号收到");
91     }
92 }
posted @ 2019-07-31 22:29  LittleDonkey  阅读(133)  评论(0编辑  收藏  举报