1.名词解释:
中介者模式:用一个中介对象来封装一序列的对象交互。中介者使各对象不需要显式地引用,从而使其耦合松散,而且可以独立第改变它们之间的交互。
2.代码示例:同事A、同事B通过中介者互相通信。
主控程序类,通过中介者,ColleagueA与ColleagueB进行通信
package DesignPattern.MeditorPattern;
public class Client {
public static void main(String[] args) {
ConcreateMeditor m = new ConcreateMeditor();
Colleague A = new ColleagueA(m);
Colleague B = new ColleagueB(m);
m.SetColleagueA((ColleagueA) A);
m.SetColleagueB((ColleagueB) B);
((ColleagueA) A).send("B, May I love you?");
((ColleagueB) B).send("A, I'm sorry, I already have a boy friend.");
}
}
运行结果:Colleague B get a message: B, May I love you?
Colleague A get a message: A, I'm sorry, I already have a boy friend.
中介者抽象类:
package DesignPattern.MeditorPattern;
abstract class Meditor {
public abstract void send(String message, Colleague colleague);
}
具体中介者类:
package DesignPattern.MeditorPattern;
public class ConcreateMeditor extends Meditor{
private ColleagueA colleagueA;
private ColleagueB colleagueB;
public void SetColleagueA(Colleague colleague) {
if(colleague instanceof ColleagueA) {
this.colleagueA = (ColleagueA) colleague;
}
}
public void SetColleagueB(Colleague colleague) {
if(colleague instanceof ColleagueB) {
this.colleagueB = (ColleagueB) colleague;
}
}
@Override
public void send(String message, Colleague colleague) {
// TODO Auto-generated method stub
if(colleague == colleagueA) {
colleagueB.notify(message);
} else {
colleagueA.notify(message);
}
}
}
同事抽象类:
package DesignPattern.MeditorPattern;
public abstract class Colleague {
protected Meditor meditor;
public Colleague(Meditor meditor) {
this.meditor = meditor;
}
}
同事A类:
package DesignPattern.MeditorPattern;
public class ColleagueA extends Colleague {
public ColleagueA(Meditor meditor) {
super(meditor);
// TODO Auto-generated constructor stub
}
public void send(String message) {
meditor.send(message, this);
}
public void notify(String message) {
System.out.println("Colleague A get a message: " + message);
}
}
同事B类:
package DesignPattern.MeditorPattern;
public class ColleagueB extends Colleague {
public ColleagueB(Meditor meditor) {
super(meditor);
// TODO Auto-generated constructor stub
}
public void send(String message) {
meditor.send(message, this);
}
public void notify(String message) {
System.out.println("Colleague B get a message: " + message);
}
}