【行为型模式】Java设计模式之:中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,它定义了一个中介对象来封装一组对象之间的交互。中介者模式可以降低对象之间的耦合度,从而提高系统的灵活性和可扩展性。

中介者模式中通常包含以下角色:文章源自新逸网络-https://www.xinac.net/9365.html

1. 抽象中介者(Mediator):定义了中介者的接口,包含了一些基本的方法,例如注册对象、发送消息等。文章源自新逸网络-https://www.xinac.net/9365.html

2. 具体中介者(Concrete Mediator):实现了抽象中介者接口,负责协调和管理各个对象之间的交互关系。文章源自新逸网络-https://www.xinac.net/9365.html

3. 抽象同事类(Colleague):定义了同事类的接口,包含了一些基本的方法,例如发送消息、接收消息等。文章源自新逸网络-https://www.xinac.net/9365.html

4. 具体同事类(Concrete Colleague):实现了抽象同事类接口,用于具体实现同事类的操作。文章源自新逸网络-https://www.xinac.net/9365.html

下面是一个简单的 Java 实现中介者模式的示例:文章源自新逸网络-https://www.xinac.net/9365.html

// 抽象中介者
interface Mediator {
    void register(Colleague colleague);
    void send(String message, Colleague sender);
}

// 具体中介者
class ConcreteMediator implements Mediator {
    private List<Colleague> colleagues = new ArrayList<>();

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

    public void send(String message, Colleague sender) {
        for (Colleague colleague : colleagues) {
            if (colleague != sender) {
                colleague.receive(message);
            }
        }
    }
}

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

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

    public abstract void send(String message);
    public abstract void receive(String message);
}

// 具体同事类
class ConcreteColleague1 extends Colleague {
    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }

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

    public void receive(String message) {
        System.out.println("同事1收到消息:" + message);
    }
}

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

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

    public void receive(String message) {
        System.out.println("同事2收到消息:" + message);
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Mediator mediator = new ConcreteMediator();
        Colleague colleague1 = new ConcreteColleague1(mediator);
        Colleague colleague2 = new ConcreteColleague2(mediator);

        mediator.register(colleague1);
        mediator.register(colleague2);

        colleague1.send("你好,同事2!");
        colleague2.send("你好,同事1!");
    }
}

在上面的示例中,抽象中介者接口定义了中介者的基本方法,具体中介者实现了该接口,并且负责协调和管理各个对象之间的交互关系。抽象同事类接口定义了同事类的基本方法,具体同事类实现了该接口,并且用于具体实现同事类的操作。文章源自新逸网络-https://www.xinac.net/9365.html

中介者模式的优点是可以将对象之间的交互关系封装到中介者对象中,从而降低对象之间的耦合度,提高系统的灵活性和可扩展性。同时,由于中介者模式可以将对象之间的交互关系集中管理,因此可以方便地对系统进行维护和扩展。但是需要注意的是,由于中介者模式需要引入中介者对象,因此可能会增加系统的复杂度和内存消耗。文章源自新逸网络-https://www.xinac.net/9365.html 文章源自新逸网络-https://www.xinac.net/9365.html

weinxin
新逸IT技术
扫一扫关注微信公众号
Admin
  • 本文由 发表于 2023-07-01
  • 转载请注明:https://www.xinac.net/9365.html
评论  0  访客  0
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定