Java 中介者模式

中介者模式

概述

  • 中介者模式是行为型模式的一种。
  • 用一个中介者对象封装一些列的对象交互,符合迪米特原则,将原有的一对多的关系变成一对一的关系,降低了类之间的耦合。

角色介绍

  • 抽象中介者类:定义同事对象到中介者对象的接口。
  • 具体中介者类:继承抽象中介者,实现父类定义的方法,接收具体同事的消息,向具体同事发送消息。
  • 抽象同事类:定义中介者对象的接口。
  • 具体同事类:继承与抽象同事类,向中介者对象发送消息,从中介者对象接收消息。

在这里插入图片描述

基本实现

前段时间武当派和峨眉派的的弟子被大力金刚指所杀,大力金刚指是少林派的绝学,因为事情重大,而且少林派实力强大,武当派和峨眉派不能够直接去少林派去问罪,只能上报武林盟主由武林盟主出面进行调停,如下图所示。

在这里插入图片描述

抽象中介者类

//抽象中介者类
public abstract class Mediator {
    
    
    public abstract void notice(String message, Collegue collegue);
}

抽象同事类

//抽象同事类
public abstract class Collegue {
    
    
    protected Mediator mediator;

    public Collegue(Mediator mediator) {
    
    
        this.mediator = mediator;
    }
}

具体同事类

//具体同事类:武当派
public class Wudang extends Collegue {
    
    
    public Wudang(Mediator mediator) {
    
    
        super(mediator);
    }

    public void sendMessage(String message) {
    
    
        mediator.notice(message, this);
    }

    public void getNotice(String message) {
    
    
        System.out.println("武当派收到消息:" + message);
    }
}
//具体同事类:峨眉派
public class Emei extends Collegue {
    
    
    public Emei(Mediator mediator) {
    
    
        super(mediator);
    }

    public void sendMessge(String message) {
    
    
        mediator.notice(message, this);
    }

    public void getNotice(String message) {
    
    
        System.out.println("峨眉派收到消息:" + message);
    }
}
//具体同事类:少林寺
public class Shaolin extends Collegue {
    
    
    public Shaolin(Mediator mediator) {
    
    
        super(mediator);
    }

    public void sendMessage(String message) {
    
    
        mediator.notice(message, this);
    }

    public void getNotice(String message) {
    
    
        System.out.println("少林寺收到消息:" + message);
    }
}

具体中介者类

//具体中介者类
public class Master extends Mediator {
    
    
    private Wudang wudang;
    private Emei emei;
    private Shaolin shaolin;

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

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

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

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

使用

public class Demo {
    
    
    public static void main(String[] args) {
    
    
        Master master = new Master();
        Wudang wudang = new Wudang(master);
        Emei emei = new Emei(master);
        Shaolin shaolin = new Shaolin(master);
        master.setWudang(wudang);
        master.setEmei(emei);
        master.setShaolin(shaolin);
        wudang.sendMessage("武当弟子被少林所伤");
        emei.sendMessge("峨眉弟子被少林所伤");
        shaolin.sendMessage("误会,不可能,绝对不可能!");
    }
}
少林寺收到消息:武当弟子被少林所伤
少林寺收到消息:峨眉弟子被少林所伤
武当派收到消息:误会,不可能,绝对不可能!
峨眉派收到消息:误会,不可能,绝对不可能!

猜你喜欢

转载自blog.csdn.net/qq_14876133/article/details/112987795
今日推荐