本文来说一说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");
    }
}

.................分割线................... 实际上我们看到,中介者大大降低了各个模块之间的耦合性,但是,很明显,中介需要维护所有的模块,如果模块很多的话,也是一样很麻烦了。