设计模式之中介者模式

设计模式之中介者模式

中介者模式的简单介绍

说到中介,我们是比较熟悉的,比如去留学,有专门的中介负责,买房子,有专门的中介负责。有中介的好处在于,我们不需要直接跟目标对象接触,也就是说,我们之间的交流可以通过中介来完成即可,这样子的好处在于,我们之间的联系不需要很紧密,特别是当涉及到的对象比较多的时候,如果对象与对象之间直接进行交互,整个关系就会变得比较复杂了。中介者模式(Mediator)就是基于这样的情形所提出来的,对象之间的交互都通过中介者来完成,这样,对象与对象之间的联系就变得比较弱了,当对象发生变化的时候,这种关系也就是不至于变得太难以处理。

中介者模式的具体实现

这里,我们通过一个简单的购房模型来实现中介者模式,以便更好地理解中介者模式

/**
 * 中介者类
 */
public class Mediator {

    // 包含多种不同类型的用户:销售者以及购买者
    private List<HouseProvider> houseProviders = new ArrayList<>();
    private List<Client> clients = new ArrayList<>();

    public void register(HouseProvider houseProvider){
        houseProviders.add(houseProvider);
    }

    public void addClient(Client client){
        clients.add(client);
    }

    // 出售房子
    public void sellingHouse(String providerName, Client client){
        for (HouseProvider houseProvider : houseProviders){
            if (houseProvider.getName().equals(providerName)){
                houseProvider.sellHouse();
                client.reply("yes");
                return;
            }
        }
        client.reply("no");
    }

}
/**
 *  房屋出售者 
 */
abstract class HouseProvider{

    protected Mediator mediator;
    protected String name;

    public String getName() {
        return name;
    }

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

    public abstract void sellHouse();
}

class HouseProviderOne extends HouseProvider{

    public HouseProviderOne(Mediator mediator, String name) {
        super(mediator, name);
    }

    @Override
    public void sellHouse() {
        System.out.printf("%s selling house\n", name);
    }
}

class HouseProviderTwo extends HouseProvider{

    public HouseProviderTwo(Mediator mediator, String name) {
        super(mediator, name);
    }

    @Override
    public void sellHouse() {
        System.out.printf("%s selling house\n", name);
    }
}

/**
 *  客户
 */
class Client{

    private Mediator mediator;
    private String name;

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

    public void buyHouse(String providerName){
        System.out.printf("Do you selling house %s\n",providerName);
        mediator.sellingHouse(providerName, this);
    }

    public void reply(String msg){
        System.out.printf("Get the reply %s\n", msg);
    }
}

从上面可以看到,客户类并没有直接跟出售房屋的类直接交互,而是通过中介者来进行协调,这样子的好处在于,客户不需要直接跟出售者进行交互,关于出售者的很多信息客户并不需要知道,反过来也是同理。

总结

中介者模式,主要用于关系比较复杂的系统中进行关系的解耦,将网状的关系网拆解成由中介者进行协调的星型结构,好处是降低了各个对象之间的耦合度,不过也带来了对应的问题,中介者所需要处理的事情比较多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值