中介者模式(Mediator Pattern)

1.中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
2.类型:行为型模式
3.类图
在这里插入图片描述
4.各部分说明
Mediator: 抽象中介者
定义一个接口用于与各同事通信。
ConcreteMediator: 具体中介者
含有对各个同事对象的引用,协调各个同事对象。
Colleague: 抽象同事类
维持了对抽象中介者的引用,具体中介者可以通过这个引用和中介者通信。
ConcreteColleague: 具体同事类
抽象同事类的子类。
每一个同事对象在需要和其他同事对象通信时,先与中介者通信,通过中介者来间接完成与其他同事类的通信。
5.实现

package 中介者模式;

import javax.print.attribute.standard.Media;

public class MediatorPattern {
    public static void main(String[] args) {
        //创建中介者
        ConcreteMediator mi = new ConcreteMediator();
        //创建同事对象
        ConcreteColleague1 c1 = new ConcreteColleague1(mi);
        ConcreteColleague2 c2 = new ConcreteColleague2(mi);
        //将同事对象放入中介者    也可用构造函数注入,参数为基类引用
        mi.setC1(c1);
        mi.setC2(c2);
        c1.myselfMethod();
        c1.depMethod();
        c2.myselfMethod();
        c2.depMethod();
    }
}

//抽象同事类
abstract class Colleague{
    protected Mediator mediator;
    public Colleague(Mediator mediator){
        this.mediator = mediator;
    }
}

//具体同事类
class ConcreteColleague1 extends Colleague{
    //通过构造函数传递中介者
    public ConcreteColleague1(Mediator mediator){
        super(mediator);
    }
    //自己的业务方法
    public void myselfMethod(){
        System.out.println("同事一的方法");;
    }
    //自己处理不了的方法
    public void depMethod(){
        super.mediator.doSomething2();
    }
}

class ConcreteColleague2 extends Colleague{
    //通过构造函数传递中介者
    public ConcreteColleague2(Mediator mediator){
        super(mediator);
    }
    //自己的业务方法
    public void myselfMethod(){
        System.out.println("同事二的方法");;
    }
    //自己处理不了的方法
    public void depMethod(){
        super.mediator.doSomething1();
    }
}

//抽象中介者类
abstract class Mediator{
    //定义同事类
    protected ConcreteColleague1 c1;
    protected ConcreteColleague2 c2;

    public void setC1(ConcreteColleague1 c1) {
        this.c1 = c1;
    }

    public void setC2(ConcreteColleague2 c2) {
        this.c2 = c2;
    }

    public ConcreteColleague1 getC1() {
        return c1;
    }

    public ConcreteColleague2 getC2() {
        return c2;
    }

    //具体中介者应实现的业务
    public abstract void doSomething1();
    public abstract void doSomething2();
}

//具体中介者
class ConcreteMediator extends Mediator{
    @Override
    public void doSomething1() {
        super.c1.myselfMethod();
    }
    @Override
    public void doSomething2() {
        super.c2.myselfMethod();
    }
}

6.优点
中介者模式的优点就是减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖,同事类只依赖中介者,减少了依赖,当然同时也降低了类间的耦合。
7.缺点
当同事类很多时,中介者的逻辑就会越复杂,越庞大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值