应用场景:把很多对象牵线搭桥做事情。
比如A类中的方法调用了B和C类的方法,而B类的方法又调用了A类和C类方法,这种情况就可以考虑中介者模式
public class MediumPattern {
public static class ModeleA{
public void play(){
ModeleB modeleB = new ModeleB();
modeleB.deal("模块A");
ModeleC modeleC = new ModeleC();
modeleC.deal("模块A");
}
public void deal(String girl){
System.out.println(girl + "调用模块A方法...");
}
}
public static class ModeleB{
public void play(){
ModeleA modeleA = new ModeleA();
modeleA.deal("模块B");
ModeleC modeleC = new ModeleC();
modeleC.deal("模块B");
}
public void deal(String girl){
System.out.println(girl + "调用模块B方法...");
}
}
public static class ModeleC{
public void play(){
ModeleA modeleA = new ModeleA();
modeleA.deal("模块C");
ModeleB modeleB = new ModeleB();
modeleB.deal("模块C");
}
public void deal(String girl){
System.out.println(girl + "调用模块C方法...");
}
}
public static void main(String[] args) {
ModeleA modeleA = new ModeleA();
modeleA.play();
}
}
这个时候相互之间耦合度严重,模块之间的互相调用可以通过一个中间协调者来操作,这个时候就可以使用到中介者模式。
中介者要知道所有模块,这样才能协调它们
public class MediumPatternExt{
private ModeleA modeleA ;
private ModeleB modeleB ;
private ModeleC modeleC ;
public void playModelA(){
modeleB.deal("模块A");
modeleC.deal("模块A");
}
public void playModelB(){
modeleA.deal("模块B");
modeleC.deal("模块B");
}
public void playModelC(){
modeleA.deal("模块C");
modeleB.deal("模块C");
}
public void setModeleA(ModeleA modeleA) {
this.modeleA = modeleA;
}
public void setModeleB(ModeleB modeleB) {
this.modeleB = modeleB;
}
public void setModeleC(ModeleC modeleC) {
this.modeleC = modeleC;
}
public ModeleA getModeleA() {
return modeleA;
}
public ModeleB getModeleB() {
return modeleB;
}
public ModeleC getModeleC() {
return modeleC;
}
public static class ModeleA{
private MediumPatternExt mediumPatternExt ;
public ModeleA(MediumPatternExt mediumPatternExt) {
this.mediumPatternExt = mediumPatternExt;
this.mediumPatternExt.setModeleA(this);
}
public void play(){
mediumPatternExt.playModelA();
}
public void deal(String girl){
System.out.println(girl + "调用模块A方法...");
}
}
public static class ModeleB{
private MediumPatternExt mediumPatternExt ;
public ModeleB(MediumPatternExt mediumPatternExt) {
this.mediumPatternExt = mediumPatternExt;
this.mediumPatternExt.setModeleB(this);
}
public void play(){
mediumPatternExt.playModelB();
}
public void deal(String girl){
System.out.println(girl + "调用模块B方法...");
}
}
public static class ModeleC{
private MediumPatternExt mediumPatternExt ;
public ModeleC(MediumPatternExt mediumPatternExt) {
this.mediumPatternExt = mediumPatternExt;
this.mediumPatternExt.setModeleC(this);
}
public void play(){
mediumPatternExt.playModelC();
}
public void deal(String girl){
System.out.println(girl + "调用模块C方法...");
}
}
public static void main(String[] args) {
MediumPatternExt mediumPatternExt = new MediumPatternExt();
ModeleA modeleA1 = new ModeleA(mediumPatternExt);
ModeleB modeleB = new ModeleB(mediumPatternExt);
ModeleC modeleC = new ModeleC(mediumPatternExt);
modeleA1.play();
}
}