A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

模式定义

中介者模式来集中相关对象之间复杂的沟通和控制方式。


使用中介者之前,各个对象之间相互依赖,如下图所示:


使用中介者模式之后,各个对象之间的联系让中介者解耦了


一个生动的例子

假如有个人喜欢另一个人,但是他不敢直接告诉那个人,所以他就想找个中间人把消息告诉这个中间人,然后再由中间人把这个消息告诉他喜欢的那个人。这个中间人的角色就是中介者。

Mediator抽象类:
public abstract class Mediator {
        abstract void contact(String content, Person person);
}

Mediator具体类:
class ConcreteMediator extends Mediator {
        Male male;
        Female female;

        @Override
        public void contact(String content, Person person) {
                if (person == male) {
                        female.getMessage(person, content.replace("我", "他"));
                } else {
                        male.getMessage(person, content.replace("我", "她"));
                }
        }

        public Male getMale() {
                return male;
        }

        public void setMale(Male male) {
                this.male = male;
        }

        public Female getFemale() {
                return female;
        }

        public void setFemale(Female female) {
                this.female = female;
        }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Colleague类:
public class Person {
        protected String name;
        protected Mediator mediator;

        public Person(String name, Mediator mediator) {
                this.name = name;
                this.mediator = mediator;
        }

        public String getName() {
                return name;
        }
}

Colleague具体类:
class Male extends Person {
        public Male(String name, Mediator mediator) {
                super(name, mediator);
        }

        public void getMessage(Person person, String message) {
                System.out.println(name + ":" + person.getName() + "她说" + message);
        }

        public void contact(String message) {
                mediator.contact(message, this);
        }
}

Colleague具体类:
class Female extends Person {
        public Female(String name, Mediator mediator) {
                super(name, mediator);
        }

        public void getMessage(Person person, String message) {
                System.out.println(name + ":" + person.getName() + "他说" + message);
        }

        public void contact(String message) {
                mediator.contact(message, this);
        }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
测试类/客户端类:
public class MediatorTest {
        public static void main(String[] args) {
                ConcreteMediator mediator = new ConcreteMediator();
                Male male = new Male("张三", mediator);
                Female female = new Female("翠花", mediator);
               
                mediator.setMale(male);
                mediator.setFemale(female);
               
                male.contact("我喜欢你!");
                female.contact("我不喜欢你,滚!");
        }
}
---------------------
转载,仅作分享,侵删
作者:EagleLi1
原文:https://blog.csdn.net/qq_21687635/article/details/85208858


1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马