【注意】最后更新于 January 24, 2018,文中内容可能已过时,请谨慎使用。
本文来说一说java设计模式之中介者模式。
中介者模式实际上不是太复杂,就是好多人之间需要进行沟通的话,假设N个人的话,区分发起方接收方,那么需要$P^{N}_{N}$种组合方式,对于每个人都是很大的开销,所以如果有个中介就好了。
我需要干什么我不用知道是谁,给中介说下,让他替我去执行了。我也不用知道到底是谁回的我。反正中介就是挣这个钱的。
我想去买个房子,跑到小区,挨家挨户的敲门,户主不打死我才怪呢!
所以中介的作用出现了,我给他说我要买房,他替我找到卖房的,把我的消息转给他,然后给我结果。这样不就都解决啦!
我们看下中介
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
|
package top.txiner.mediator;
/**
* @author : hundred
* time: 18-1-24
* website : http://txiner.top
* 懵懂的小白
*/
public abstract class Mediator {
private Trader customer;
private Trader saler;
public Trader getCustomer() {
return customer;
}
public void setCustomer(Trader customer) {
this.customer = customer;
}
public Trader getSaler() {
return saler;
}
public void setSaler(Trader saler) {
this.saler = saler;
}
public abstract void bargain(String msg);
}
|
看下具体的这个卖房子的中介
1
2
3
4
5
6
7
|
public class Department extends Mediator {
@Override
public void bargain(String msg) {
System.out.println(msg);
}
}
|
我们看下交易双方吧。
1
2
3
4
5
6
7
8
9
|
public abstract class Trader {
protected Mediator mediator;
public Trader(Mediator mediator) {
this.mediator = mediator;
}
public abstract void contact(String msg);
}
|
买家
1
2
3
4
5
6
7
8
9
10
|
public class Customer extends Trader {
public Customer(Mediator mediator) {
super(mediator);
}
@Override
public void contact(String msg) {
super.mediator.bargain(msg);
}
}
|
卖家
1
2
3
4
5
6
7
8
9
10
|
public class Saler extends Trader{
public Saler(Mediator mediator) {
super(mediator);
}
@Override
public void contact(String msg) {
super.mediator.bargain(msg);
}
}
|
好啦,我们看下具体的交易吧。
1
2
3
4
5
6
7
8
9
10
11
|
public class User {
public static void main(String[] args) {
Mediator mediator=new Department();
Trader customer=new Customer(mediator);
Trader saler=new Saler(mediator);
mediator.setCustomer(customer);
mediator.setSaler(saler);
customer.contact("I want to buy");
saler.contact("I want the price higher");
}
}
|
.................分割线...................
实际上我们看到,中介者大大降低了各个模块之间的耦合性,但是,很明显,中介需要维护所有的模块,如果模块很多的话,也是一样很麻烦了。