设计模式之中介者模式

来源:互联网 发布:packageinfo.java作用 编辑:程序博客网 时间:2024/06/06 04:49

设计模式之中介者模式

中介者模式的简单介绍

说到中介,我们是比较熟悉的,比如去留学,有专门的中介负责,买房子,有专门的中介负责。有中介的好处在于,我们不需要直接跟目标对象接触,也就是说,我们之间的交流可以通过中介来完成即可,这样子的好处在于,我们之间的联系不需要很紧密,特别是当涉及到的对象比较多的时候,如果对象与对象之间直接进行交互,整个关系就会变得比较复杂了。中介者模式(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);    }}

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

总结

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

原创粉丝点击