设计模式之中介者模式

  1. 简单梳理中介者模式
    1. 中介者模式的实现
      1. 定义业务方法
      2. 执行结果
      3. 结果分析
  2. 联系作者
    1. 微信公众号
    2. QQ群

简单梳理中介者模式

中介者模式的实现

现实生活中,经常会见到对话双方靠中介来传递消息的场景。
比如在当前的国际形势下,不同国家之间对话,就可以通过联合国安理会来对话。

我们来看下这种使用中间人对话的场景如何用设计模式来实现。

国家基类

//国家
public abstract class Country {
    protected UnitedNations unitedNations;

    public Country(UnitedNations unitedNations) {
        this.unitedNations = unitedNations;
    }
}

联合国基类

//联合国机构
public abstract class UnitedNations {
    public abstract void Declare(String message, Country country);
}

实现两个具体的国家类,当然,继承自国家基类

public class USA extends Country{
    public USA(UnitedNations unitedNations) {
        super(unitedNations);
    }

    public void Declare(String message){
        unitedNations.Declare(message,this);
    }

    public void GetMessage(String message){
        System.out.println("美方获得对方的消息:"+message);
    }
}
public class Iraq extends Country{
    public Iraq(UnitedNations unitedNations) {
        super(unitedNations);
    }

    public void Declare(String message){
        unitedNations.Declare(message,this);
    }

    public void GetMessage(String message){
        System.out.println("伊方获得对方的消息:"+message);
    }
}

实现一个传话的中介类,比如联合国安理会,来实现两个国家的对话传递,当然继承自联合国基类

public class UnitedNationsSecurityCouncil extends UnitedNations{
    private USA usa;
    private Iraq iraq;

    public USA getUsa() {
        return usa;
    }

    public void setUsa(USA usa) {
        this.usa = usa;
    }

    public Iraq getIraq() {
        return iraq;
    }

    public void setIraq(Iraq iraq) {
        this.iraq = iraq;
    }

    @Override
    public void Declare(String message, Country country) {
        if(country == usa){
            iraq.GetMessage(message);
        }else{
            usa.GetMessage(message);
        }
    }
}

这样我们前期的定义就算做完了,
然后我们看具体应用中的使用。

定义业务方法

看在具体业务逻辑中如何使用

public class MediatorTest {
    public static void main(String[] args) {
        //中介者模式
        func1();
    }

    public static void func1(){
        UnitedNationsSecurityCouncil UNSC = new UnitedNationsSecurityCouncil();
        USA usa = new USA(UNSC);
        Iraq iraq = new Iraq(UNSC);

        UNSC.setUsa(usa);
        UNSC.setIraq(iraq);

        usa.Declare("不准瞎搞");
        iraq.Declare("我们没有瞎搞");
    }
}

执行结果

伊方获得对方的消息:不准瞎搞
美方获得对方的消息:我们没有瞎搞

结果分析

中介者模式,用一个中介对象,来封装一系列的对象交互。
中介者使得各对象不需要显示的引用,从而降低耦合度,而且可以独立的改变他们的交互。

中介者模式很容易在系统中使用,但是需要注意,中介者模式也很容易在系统中误用,
当出现多对多等复杂的场景时,不要着急使用中介者模式,而是考虑设计是否合理。

联系作者

微信公众号

xiaomingxiaola
(BossLiu)

QQ群

58726094


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 384276224@qq.com

×

喜欢就点赞,疼爱就打赏

日记本 网文世界