java 中介模式_JAVA 设计模式 中介者模式

目录

用途

中介者模式 (Mediator)

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

中介者模式是一种行为型模式。

结构

IgDaBaAEAANAaEC0AgCagMVWBMaXu1QCaDqIFANAENKbKIVqgVhAtAIAmoSlMQ7qATBAtAIAmocoxxVP3SgDNBdECAGgUGmNa3esANBdECwAAgNaAaAEAANAaEC0AAABaA6IFAABAa0C0AAAAaA2IFgAAAK0B0QIAAKA1IFoAAAC0BkQLAACA1oBoAQAA0BoQLQAAAFoDogUAAEBrQLQAAABoDYgWAAAArQHRAgAAoDX+Hwn+YKR7r4+cAAAAAElFTkSuQmCC

图-中介者模式结构图

Mediator: 为 Colleague 对象定义一个交流接口。

abstract class Mediator {

public abstract void Send(String message, Colleague colleague);

}

ConcreteMediator: 实现 Mediator 中的交流接口。 这个类中需要了解并维护所有的 colleague 对象。

48304ba5e6f9fe08f3fa1abda7d326ab.png

class ConcreteMediator extends Mediator {

private ConcreteColleague1 colleague1;

private ConcreteColleague2 colleague2;

public void setColleague1(ConcreteColleague1 colleague1) {

this.colleague1 = colleague1;

}

public void setColleague2(ConcreteColleague2 colleague2) {

this.colleague2 = colleague2;

}

@Override

public void Send(String message, Colleague colleague) {

if (colleague == colleague1) {

colleague2.Notify(message);

} else if (colleague == colleague2){

colleague1.Notify(message);

} else {

System.out.println("Error!");

}

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

Colleague组 : 每个 Colleague 对象应该知道它的 Mediator 对象,但不知道其他同事对象。它只能联系 Mediator 对象。

48304ba5e6f9fe08f3fa1abda7d326ab.png

abstract class Colleague {

protected Mediator mediator;

public Colleague(Mediator mediator) {

this.mediator = mediator;

}

public void Send(String message) {

mediator.Send(message, this);

}

public abstract void Notify(String message);

}

class ConcreteColleague1 extends Colleague {

public ConcreteColleague1(Mediator mediator) {

super(mediator);

}

@Override

public void Notify(String message) {

System.out.println("同事1得到信息:" + message);

}

}

class ConcreteColleague2 extends Colleague {

public ConcreteColleague2(Mediator mediator) {

super(mediator);

}

@Override

public void Notify(String message) {

System.out.println("同事2得到信息:" + message);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

测试代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

public class MediatorPattern {

public static void main(String[] args) {

ConcreteMediator mediator = new ConcreteMediator();

ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);

ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);

mediator.setColleague1(colleague1);

mediator.setColleague2(colleague2);

colleague1.Send("How are you?");

colleague2.Send("Fine, thank you. And you?");

colleague1.Send("I'm fine. Thankes.");

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果

同事2得到信息:How are you?

同事1得到信息:Fine, thank you. And you?

同事2得到信息:I'm fine. Thankes.

应用场景

中介者模式一般用于定义良好但是交互较为负责的对象集合。产生的相互依赖关系是无结构化的并且难以理解。

和很多其他对象有引用关系以及交互的对象很难被重用。

想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。

推荐

参考资料

《大话设计模式》

《HeadFirst设计模式》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值