一般称中介者模式会更好会意一点,就是那个收集信息,然后搞介绍再收服务费的那玩意。
调停者模式 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服务器
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会员
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:客户端调用
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
使用频率:
低
如果代码功能不算太专业,一般在业务逻辑中就直接写了,不会专门写个模式来弄。利弊影响:
低
用的比较少,暂不评价。