java设计模式(十八)中介者模式

定义

中介者模式又称调停者模式,属于行为型模式;中介者模式包装了一系列对象相互作用的方式,使得这些对象不必互相明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。

模式结构

在这里插入图片描述

角色职责

1.抽象中介者(Mediator)角色: 定义了与各同事类之间进行通信的方法。
2.具体中介者(ConcreteMediator): 抽象中介者的子类,协调各个同事对象实现协作行为,维持对各个同事对象的引用。
3.抽象同事类(Colleague): 定义各个同事类的公有方法,并声明一些抽象方法来提供子类实现,同事维持一个抽象中介者的引用,子类可以通过该引用与中介者通信。
4.具体同事类(ConcreteColleague): 抽象同事的子类,每一个同事对象在需要和其他同事对象通信时,先与中介者通信,通过中介者来间接完成与其他同事类的通信,在具体同事类中实现了在抽象同事类中声明的抽象方法。

代码实现

抽象中介者:

public abstract class Mediator
{
    protected ArrayList<Colleague> colleagues = new ArrayList<>();

    public void add(Colleague colleague)
    {
        colleagues.add(colleague);
    }

    public abstract void operation(Colleague colleague);
}

具体中介者:

public class ConcreteMediator extends Mediator
{
    @Override
    public void operation(Colleague colleague)
    {
        if(colleague instanceof ConcreteColleague1)
            colleagues.get(1).update();
        else if(colleague instanceof ConcreteColleague2)
            colleagues.get(0).update();
    }
}

抽象同事类:

public abstract class Colleague
{
    //抽象中介者引用
    protected Mediator mediator;
    public Colleague(Mediator mediator)
    {
        this.mediator = mediator;
    }
    //数据更新方法
    public abstract void update();
    //数据更改方法
    public abstract void changed();
}

具体同事类:

public class ConcreteColleague1 extends Colleague
{
    public ConcreteColleague1(Mediator mediator)
    {
        super(mediator);
    }

    @Override
    public void update()
    {
        System.out.println("更新同事类1");
    } 

    @Override
    public void changed()
    {
        System.out.println("同事类1数据更改");
        mediator.operation(this);
    }
}

public class ConcreteColleague2 extends Colleague
{
    public ConcreteColleague2(Mediator mediator)
    {
        super(mediator);
    }

    @Override
    public void update()
    {
        System.out.println("更新同事类2");
    }

    @Override
    public void changed()
    {
        System.out.println("同事类2数据更改");
        mediator.operation(this);
    }
}

测试结果:

public static void main(String[] args)
{
    Mediator mediator = new ConcreteMediator();
    Colleague colleague1 = new ConcreteColleague1(mediator);
    Colleague colleague2 = new ConcreteColleague2(mediator);
    mediator.add(colleague1);
    mediator.add(colleague2);
    colleague1.changed();
    colleague2.changed();
}
同事类1数据更改
更新同事类2
同事类2数据更改
更新同事类1

适用场景

1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

优缺点

优点:
1.降低程序复杂度:中介者模式的优点就是减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖;
2.解耦 :减少类间的依赖的同时,也降低了类间的耦合;
缺点:
1.系统稳定差:中介者模式这个“中介”承担了较多的责任,因此一旦这个中介对象处理问题,那么整个系统就会收到重大的影响。
2.逻辑复杂:中介者会膨胀的很大,并且逻辑复杂,同时类越多中介者的逻辑就越复杂。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走进IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值