文章目录
  1. 1. 调停者模式 Mediator
    1. 1.1. 问题:
    2. 1.2. 意图:
    3. 1.3. 代码
  2. 2. 小结

一般称中介者模式会更好会意一点,就是那个收集信息,然后搞介绍再收服务费的那玩意。

调停者模式 Mediator

题义:调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。

问题:

We want to design reusable components, but dependencies between the potentially reusable pieces demonstrates the “spaghetti code” phenomenon (trying to scoop a single serving results in an “all or nothing clump”).

意图:

  • Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.
  • Design an intermediary to decouple many peers.
  • Promote the many-to-many relationships between interacting peers to “full object status”.

代码

例:名字叫中介者,听起来和代理倒是有些相近,但一般场景下,代码是两方不可访问,而中介并不是,只是方便两方访问,比如QQ软件,我给你发消息,你又给我加消息,QQ就相当于一个中介。

代码1:QQ服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.ArrayList;
import java.util.List;
/**
* @author xdnote.com
* */
public class Mediator {

public static List<Member> onlineMembers = new ArrayList<Member>();

public static void login(Member member){
System.out.println(member.getName()+"上线了");
onlineMembers.add(member);
}

public static void storeMessage(String message, Member form, Member to){
to.resive(message, form);
}
}

代码2:QQ会员

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Member {

private String name;

public String getName() {
return name;
}
public Member(String name) {
super();
this.name = name;
Mediator.login(this);
}
//发送消息
public void send(String str,Member member){
Mediator.storeMessage(str, this, member);
};

//收到消息
public void resive(String str,Member member){
System.out.println("用户 "+this.getName()+"的窗口上:"+"收到来自 "+member.getName()+" 的消息:" + str);
};
}

代码3:客户端调用

1
2
3
4
5
6
7
8
9
10
11
12
public class Client {
public static void main(String[] args){
Member m1 = new Member("m1");
Member m2 = new Member("m2");
m1.send("发你个消息", m2);
m2.send("回你个消息", m1);
Member m3 = new Member("m3");
m1.send("给m3发个信息", m2);
m1.send("发你个消息", m3);
m2.send("发你个消息", m3);
}
}

小结

调停者模式(中介者模式) Mediator

  • 使用频率:
    如果代码功能不算太专业,一般在业务逻辑中就直接写了,不会专门写个模式来弄。

  • 利弊影响:
    用的比较少,暂不评价。

文章目录
  1. 1. 调停者模式 Mediator
    1. 1.1. 问题:
    2. 1.2. 意图:
    3. 1.3. 代码
  2. 2. 小结