设计模式之中介者模式(十九)

中介者模式(Mediator Pattern)是一种行为型设计模式,也叫作调停者模式,它通过减少对象之间的直接通信来减少对象之间的耦合。在中介者模式中,所有对象的交互都是通过一个中介者对象来完成的,而不是直接进行交互。这个中介者对象负责协调不同对象之间的交互,从而降低了对象之间的耦合度,同时也使得对象之间的通信更加统一和简化。

中介者模式的主要角色包括:

  1. 中介者(Mediator):负责协调各个同事对象之间的交互,通常包括一个或多个接口,用于让各个同事对象之间进行通信。
  2. 同事对象(Colleague):它是中介者模式中的参与者,它们之间通过中介者来通信,但是其本身并不知道中介者的具体实现。

中介者模式的使用场景包括:当一个系统中对象之间的交互关系变得复杂并开始产生耦合时,可以使用中介者模式。例如,一个公司的员工之间可能需要相互交流联系,而员工之间的关系可能非常复杂。这时,可以引入一个中介者,如公司的内部邮件系统,来协调员工之间的交互,降低对象之间的耦合度。

下面是一个使用Java实现中介者模式的示例:

// 中介者接口,用于定义各个同事对象之间的消息传递方法
interface Mediator {
    void sendMessage(String message, Colleague colleague);
}

// 具体中介者,实现各个同事对象之间的消息传递方法
class ConcreteMediator implements Mediator {
    private List<Colleague> colleagues;

    public ConcreteMediator() {
        colleagues = new ArrayList<Colleague>();
    }

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

    @Override
    public void sendMessage(String message, Colleague colleague) {
        for (Colleague c : colleagues) {
            if (c != colleague) {
                c.receiveMessage(message);
            }
        }
    }
}

// 同事类,定义各个同事对象的基本行为
abstract class Colleague {
    protected Mediator mediator;

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

    public abstract void sendMessage(String message);
    public abstract void receiveMessage(String message);
}

// 具体同事类,实现各个同事对象的具体行为
class ConcreteColleague1 extends Colleague {
    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }

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

    @Override
    public void receiveMessage(String message) {
        System.out.println("ConcreteColleague1 received message: " + message);
    }
}

// 具体同事类,实现各个同事对象的具体行为
class ConcreteColleague2 extends Colleague {
    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }

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

    @Override
    public void receiveMessage(String message) {
        System.out.println("ConcreteColleague2 received message: " + message);
    }
}

// 使用示例
public class MediatorPatternExample {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();

        Colleague c1 = new ConcreteColleague1(mediator);
        Colleague c2 = new ConcreteColleague2(mediator);

        mediator.addColleague(c1);
        mediator.addColleague(c2);

        c1.sendMessage("Hello, ConcreteColleague2!");
        c2.sendMessage("Hello, ConcreteColleague1!");
    }
}

在这个示例中,Mediator接口表示中介者,用于定义各个同事对象之间的消息传递方法。ConcreteMediator是具体中介者类,实现各个同事对象之间的消息传

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值