设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 中介者模式(Mediator)
中介者封装一系列对象操作,使对象之间不需要显式操作,从而实现耦合松散。
一、说明:
1、IMediator 中介者(接口);
2、AbstractColleague 同事类(彼此之间相互影响的类);
3、ColleagueA 同事类.实现类;
4、ColleagueB 同事类.实现类;
5、Mediator 中介者.实现类。
二、Java实现,代码如下:
1、IMediator
package com.java.designPattern.mediator;
/**
* 中介者 - 接口
*
*/
public interface IMediator {
public void handleColleagueA();
public void handleCooleagueB();
}
2、AbstractColleague
package com.java.designPattern.mediator;
/**
* 同事类 - 彼此之间相互影响
*
*/
public abstract class AbstractColleague {
private Integer num;
public AbstractColleague(Integer num) {
this.num = num;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public abstract void setNum(Integer num, IMediator mediator);
}
3、ColleagueA
package com.java.designPattern.mediator;
/**
* 同事类 - 实现类
*
*/
public class ColleagueA extends AbstractColleague {
public ColleagueA(Integer num) {
super(num);
}
@Override
public void setNum(Integer num, IMediator mediator) {
setNum(num);
mediator.handleCooleagueB();
}
}
4、ColleagueB
package com.java.designPattern.mediator;
/**
* 同事类 - 实现类
*
*/
public class ColleagueB extends AbstractColleague {
public ColleagueB(Integer num) {
super(num);
}
@Override
public void setNum(Integer num, IMediator mediator) {
setNum(num);
mediator.handleColleagueA();
}
}
5、Mediator
package com.java.designPattern.mediator;
/**
* 中介者 - 实现类
*
*/
public class Mediator implements IMediator {
private ColleagueA colleagueA;
private ColleagueB colleagueB;
public Mediator(ColleagueA colleagueA, ColleagueB colleagueB) {
this.colleagueA = colleagueA;
this.colleagueB = colleagueB;
}
@Override
public void handleColleagueA() {
colleagueA.setNum(colleagueB.getNum() + 1);
}
@Override
public void handleCooleagueB() {
colleagueB.setNum(colleagueA.getNum() - 1);
}
}
6、Test
package com.java.designPattern.mediator;
/**
* 测试类
*
*/
public class Test {
public static void main(String[] args) {
ColleagueA colleagueA = new ColleagueA(0);
ColleagueB colleagueB = new ColleagueB(0);
Mediator mediator = new Mediator(colleagueA, colleagueB);
System.out.println("colleagueA : " + colleagueA.getNum());
System.out.println("colleagueB : " + colleagueB.getNum());
System.out.println("parting line !!!");
colleagueA.setNum(2, mediator);
System.out.println("colleagueA : " + colleagueA.getNum());
System.out.println("colleagueB : " + colleagueB.getNum());
System.out.println("parting line !!!");
colleagueB.setNum(3, mediator);
System.out.println("colleagueA : " + colleagueA.getNum());
System.out.println("colleagueB : " + colleagueB.getNum());
}
}
输出:
colleagueA : 0
colleagueB : 0
parting line !!!
colleagueA : 2
colleagueB : 1
parting line !!!
colleagueA : 4
colleagueB : 3