02_中介者模式

本文介绍了中介者模式的基本概念,探讨了其在系统设计中的作用,特别是在处理对象间复杂交互时的优势,并通过一个简单的实例展示了该模式的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b]中介者模式定义:[/b]用一个中介对象来封装一些列的对象交互。中介者使个对象不需要显示的互相引用,从而使其耦合松散,而且可以独立的改变他们的交互

我擦,看到上面的这段话,感觉把本来你知道的意思往你不明白的意思上面说啊;实际上就跟找房子似的,你要找房,房东要租房子,中间得通过中介,吐槽一下北京中介行业的混乱现象;这样就不用你自己和房东去接触,砍价还价之类的;而且你和房东可以松耦合,你俩老死不相往来啊
中介者是协调对象的,对象之间的交互都通过中介来完成;

一般中介者是一个抽象类;具体中介者的实现类需要了解各个对象的信息;中介者实现类的责任重了;业务简单可以去除抽象;

为什么要用中介者模式呢?系统分割许多对象可以增加其可复用性,对象连接的增加也会降低可复用性,大量的连接使得对象不可能在没有其他对象的支持下工作,系统变为一个不可分割的整体;对系统进行较大的改动比较困难;

[b]适用场景:[/b]
一组对象以良好的定义但是复杂的交互进行通信;以及想定制一个分布在多个类中的行为,而又不想生成太多子类的场合;

典型应用计算器:要慎用;如果出现多对多交互复杂的对象时;反思设计是否合理;

优点和缺点都是它自身啊;

将对象如何协作进行抽象,即对象之间的交互;将中介作为一个独立的概念并将其封装在一个对象中,将对象各自行为本身的的行为转移到他们之间的交互上面来;更宏观的看待系统;将交互复杂转换到了中介者的复杂,控制集中;缺点就是中介者实现类的复杂度比每个对象都要高;

代码例子就是 美国和伊拉克发表声明都是通过联合国安理会发布;而不是两个人对着掐;两国不必直接接触;

package mediator;

public abstract class Country {

protected UnitedNations mediator;

public Country(UnitedNations mediator) {
this.mediator = mediator;
}
http://pv-love.iteye.com/admin/blogs/1908162/edit#
public void declare(String message) {
mediator.declare(message, this);
}

public void getMessage(String message) {
System.out.println(this.getClass().getSimpleName() + " 获得的信息是:"
+ message);
}
}


package mediator;

public class Iraq extends Country {

public Iraq(UnitedNations mediator) {
super(mediator);
}

}



package mediator;

public class USA extends Country {

public USA(UnitedNations mediator) {
super(mediator);
}

}


package mediator;

public abstract class UnitedNations {
public abstract void declare(String message, Country colleague);
}


package mediator;

public class UnitedNationsSecurityCouncil extends UnitedNations {

private Country usa;
private Country iraq;

@Override
public void declare(String message, Country colleague) {
if (colleague == getUsa()) {
getIraq().getMessage(message);
} else if (colleague == getIraq()) {
getUsa().getMessage(message);
}
}

public void setUsa(Country usa) {
this.usa = usa;
}

public Country getUsa() {
return usa;
}

public void setIraq(Country iraq) {
this.iraq = iraq;
}

public Country getIraq() {
return iraq;
}
}


package mediator;

public class TestMediator {
public static void main(String args[]) {
UnitedNationsSecurityCouncil unsc = new UnitedNationsSecurityCouncil();
Country usa = new USA(unsc);
Country iraq = new Iraq(unsc);
unsc.setUsa(usa);
unsc.setIraq(iraq);
usa.declare("别造原子弹啊,要不然我打你");
iraq.declare("光脚不怕穿鞋的,我擦,你来打啊");
}
}


输出下面的文字,他们之间的通信都是通过安理会完成的
Iraq 获得的信息是:别造原子弹啊,要不然我打你
USA 获得的信息是:光脚不怕穿鞋的,我擦,你来打啊[size=large][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值