设计模式之中介者模式

来源:互联网 发布:素颜霜 知乎 编辑:程序博客网 时间:2024/05/17 01:26

中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互。中介者使各个对象间不需要显式地互相引用,所以可以使耦合松散,而且可以独立改变对象之间的交互。

比如世界上的国家可以看成一系列同类对象,如果让这些国家单独沟通,类就会变得很复杂,此时可以使用一个中介者来封装国家之间的交互。

国家类:主要实现声明信息和接收信息的方法

public abstract class Country {    protected Mediator mediator;    public Country(Mediator mediator) {        this.mediator = mediator;    }    public void declare(String message){        mediator.declare(message,this);    }    public void getMessage(String message) {        System.out.println(getClass().getSimpleName() + "得到信息:" + message);    }}class China extends Country {    public China(Mediator mediator) {        super(mediator);    }}class UnitedStates extends Country {    public UnitedStates(Mediator mediator) {        super(mediator);    }}

中介者基类,基本方法就是接收某个国家的声明:

public interface Mediator {    void declare(String message, Country country);}

中介者实现,依赖于所有的国家对象,declare()接收某个国家发送的信息,转发给其他所有国家:

public class WorldTradeOrganization implements Mediator {    private China china;    private UnitedStates us;    public void setChina(China china) {        this.china = china;    }    public void setUs(UnitedStates us) {        this.us = us;    }    @Override    public void declare(String message, Country country) {        if (country == china) {            us.getMessage(message);        } else if (country == us) {            china.getMessage(message);        }    }}

测试类:

public class Main {    public static void main(String[] args) {        final WorldTradeOrganization worldTradeOrganization = new WorldTradeOrganization();        final China china = new China(worldTradeOrganization);        final UnitedStates us = new UnitedStates(worldTradeOrganization);        worldTradeOrganization.setChina(china);        worldTradeOrganization.setUs(us);        us.declare("中国,你们家的老干妈真好吃");        china.declare("美国,你说得没错");    }}

输出:

China得到信息:中国,你们家的老干妈真好吃UnitedStates得到信息:美国,你说得没错

基本上就是通过创建一个中介者来降低各个国家间的耦合,某个国家的改变并不会影响到其他国家,只要修改中介者类就可以了。但是中介者与各个国家间的耦合就很高了,这是一个缺点。

原创粉丝点击