Java基础

[设计模式]中介者模式

2020-03-19  本文已影响0人  Merbng

定义

定义了一个对象来封装一系列对象之间的交互关系,中介者使得各个对象之间不需要显式的相互引用,从而降低了耦合,而且还可以独立的改变它们之间的交互行为

例子

/**抽象中介角色
 * Created by merbng on 2020/3/19.
 */

public abstract class WulinAlliance {
    public abstract void notice(String message, United united);
}


/**
 * 具体中介者角色: 武林盟主类
 * Created by merbng on 2020/3/19.
 */

public class Champions extends WulinAlliance {
    private Wudang wudang;
    private Shaolin shaolin;
    private Emei emei;

    public void setShaolin(Shaolin shaolin) {
        this.shaolin = shaolin;
    }

    public void setEmei(Emei emei) {
        this.emei = emei;
    }

    public void setWudang(Wudang wudang) {
        this.wudang = wudang;
    }

    @Override
    public void notice(String message, United united) {
        if (united == wudang) {
            shaolin.getNotice(message);
        } else if (united == emei) {
            shaolin.getNotice(message);
        } else if (united == shaolin) {
            wudang.getNotice(message);
            emei.getNotice(message);
        }
    }
}

/**
 * 抽象同事角色
 * Created by merbng on 2020/3/19.
 */

public abstract class United {
    protected WulinAlliance wulinAlliance;

    public United(WulinAlliance wulinAlliance) {
        this.wulinAlliance = wulinAlliance;
    }
}


/**具体同事类
 * Created by merbng on 2020/3/19.
 */

public class Wudang extends United {
    public Wudang(WulinAlliance wulinAlliance) {
        super(wulinAlliance);
    }

    public void sendAlliance(String message) {
        wulinAlliance.notice(message, this);
    }

    public void getNotice(String message) {
        Log.e("==设计模式:中介者模式==","武当收到消息:" + message);
    }
}
/**具体同事类
 * Created by merbng on 2020/3/19.
 */

public class Shaolin extends United {
    public Shaolin(WulinAlliance wulinAlliance) {
        super(wulinAlliance);
    }

    public void sendAlliance(String message) {
        wulinAlliance.notice(message, this);
    }

    public void getNotice(String message) {
        Log.e("==设计模式:中介者模式==","少林收到消息:" + message);
    }
}
/**
 * 具体同事类
 * Created by merbng on 2020/3/19.
 */

public class Emei extends United {
    public Emei(WulinAlliance wulinAlliance) {
        super(wulinAlliance);
    }

    public void sendAlliance(String message) {
        wulinAlliance.notice(message, this);
    }

    public void getNotice(String message) {
        Log.e("==设计模式:中介者模式==", "峨眉收到消息:" + message);
    }
}

测试类

public class MediatorModeTest extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    /* 中介者模式可以拿武侠来举例,江湖中门派众多,门派之前因为想法不同会有很多的利益冲突,这样就会带来无休止的纷争。为了江湖的安宁,大家推举出了一个大家都认可的武林盟主来对江湖纷争进行调停。
前段时间武当派和峨眉派的的弟子被大力金刚指所杀,大力金刚指是少林派的绝学,因为事情重大,而且少林派实力强大,武当派和峨眉派不能够直接去少林派去问罪,只能上报武林盟主由武林盟主出面进行调停
    * */
        Champions champions = new Champions();
        Wudang wudang = new Wudang(champions);
        Shaolin shaolin = new Shaolin(champions);
        Emei emei = new Emei(champions);
        champions.setWudang(wudang);
        champions.setShaolin(shaolin);
        champions.setEmei(emei);
        wudang.sendAlliance("武当弟子被少林大力金刚指所杀");
        emei.sendAlliance("峨眉弟子被少林大力金刚指所杀");
        shaolin.sendAlliance("少林弟子绝不会做出这种事情");
    }
}

输出结果:

输出结果为:
少林收到消息:武当弟子被少林大力金刚指所杀
少林收到消息:峨眉弟子被少林大力金刚指所杀
武当收到消息:少林弟子绝不会做出这种事情
峨眉收到消息:少林弟子绝不会做出这种事情

优缺点

优点

缺点

适用场景

参考链接:
刘望舒-设计模式(十四)中介者模式
设计模式之中介者模式

上一篇 下一篇

猜你喜欢

热点阅读