调停者模式 java_Java第五设计模式:中介(调停者)设计模式

模式定义:

使用中介者模式来集中相关对象之间复杂的沟通和控制方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。

当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。

fc5d13ca4ed2

使用中介模式前

fc5d13ca4ed2

使用中介模式后

public class MediatorTest {

public static void main(String[] args) {

// 实例化同事A、B

ConcreteColleagueA colleagueA = new ConcreteColleagueA("大家好,我是同事A。");

ConcreteColleagueB colleagueB = new ConcreteColleagueB("大家好,我是同事B。");

// 同时把同事A、B传入给中介者

ConcreteMediator am = new ConcreteMediator();

am.setColleagueA(colleagueA);

am.setColleagueB(colleagueB);

// 同事A影响同事B

System.out.println(colleagueB.getStrAttribute());

colleagueA.setString("同事A传递给同事B的值", am);

System.out.println(colleagueB.getStrAttribute());

System.out.println("==========================");

// 同事B影响同事A

System.out.println(colleagueA.getStrAttribute());

colleagueB.setString("同事B传递给同事A的值", am);

System.out.println(colleagueA.getStrAttribute());

}

}

//抽象中介者:

interface AbstractMediator {

//中介者通过此方法来改变同事B

public void aChangedB(String str);

//中介者通过此方法来改变同事A

public void bChangedA(String str);

}

//抽象同事类:

abstract class AbstractColleague {

//同事对象在改变的时候,通知中介者,并传递影响值

public abstract void setString(String str, AbstractMediator am);

//同事对象提供一个接口接收中介者传递的影响值

public abstract void changeString(String str);

}

//具体同事类A:

class ConcreteColleagueA extends AbstractColleague {

// 同事A的字符串属性

private String strAttribute;

// 构造函数,构造字符串属性

public ConcreteColleagueA(String str) {

this.strAttribute = str;

}

/**

* 被改变的函数

*/

@Override

public void changeString(String str) {

this.strAttribute = this.strAttribute + "这是同事B对我的影响:" + str;

}

/**

* 改变时,通知中介者改变其他同事

*/

@Override

public void setString(String str, AbstractMediator am) {

am.aChangedB(str);

}

public String getStrAttribute() {

return strAttribute;

}

}

//具体同事类B:

class ConcreteColleagueB extends AbstractColleague {

private String strAttribute;

public ConcreteColleagueB(String str) {

this.strAttribute = str;

}

@Override

public void changeString(String str) {

this.strAttribute = this.strAttribute + "这是同事A对我的影响:" + str;

}

@Override

public void setString(String str, AbstractMediator am) {

am.bChangedA(str);

}

public String getStrAttribute() {

return strAttribute;

}

}

//具体中介者类:

class ConcreteMediator implements AbstractMediator {

// 持有并维护同事A

private ConcreteColleagueA colleagueA;

// 持有并维护同事B

private ConcreteColleagueB colleagueB;

// 传入同事A的对象

public void setColleagueA(ConcreteColleagueA colleagueA) {

this.colleagueA = colleagueA;

}

// 传入同事B的对象

public void setColleagueB(ConcreteColleagueB colleagueB) {

this.colleagueB = colleagueB;

}

/**

* 收到同事A的改变,通知同事B改变

*/

@Override

public void aChangedB(String str) {

colleagueB.changeString(str);

}

/**

* 收到同事B的改变,通知同事A改变

*/

@Override

public void bChangedA(String str) {

colleagueA.changeString(str);

}

}

fc5d13ca4ed2

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值