中介者模式是设计模式中一个比较常用的模式,他的原理比较简单,其实就是,把各个组件(对象)之间的复杂交互通讯通过其中的一个”中介者”来处理.
中介者(midiator)模式通过提供一种松耦合的方式,解决对个对象之间复杂的交换问题..在这种模式中,只有一个类彻底清楚其他类的方法,当类发生变化时,他们会通知中介者,在由中介者将改变通知其他相关的类(对象/组件).
//拿一个男人和女人通过媒人约会的例子来实现这种设计模式...:)哈哈.这就是“通俗模式“
1.明确,男人和女人如果约会,假设男方提出约会(女方提出过程类似).如果没有媒人,该过程如下:
a)男方如果想和女方约会,男方
b)首先请示自己的父母(^_^,假设是封建家庭哦...),
c)然后通知女方
d)女方需要请示女方父母.是否同意约会.
弊端:需要男方交换的对象太多,且关系复杂,当随着男女之间的交往的复杂,会涉及到更多复杂的交换,双方父母的交换也很更复杂,使得四个对象(男,女,男方家长,女方家长)关系复杂.难以控制.
模式改进:采取媒人做“中介者“-模式,将变得简单:,其中无论那一个人有什么要求,请求,只需要告诉“媒人“,至于该请求需要告诉谁,和谁交换,只有媒人知道,
//模拟代码类如下:&&&&&&:))
package meditator;
/** * <p>Title: 男人类</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: 乐开工作室</p> * @author 陈少坤 * @version 1.0 */
public class Man { private Matchmaker mat; // 媒人
public Man(Matchmaker mat) { this.mat=mat; mat.registeMan(this);//把自己在媒人那里注册(声明) } public static void main(String[] args) {
}
/** *考虑是否同意 * @return */ public boolean thinking(String says) {
System.out.println("男人考虑:我该不该同意呢???"); if (says.length() > 5){ System.out.println("我同意了"); return true; } else{ System.out.println("我不同意."); return false; }
}
/** * 提出约会 * 男人提出约会,只需要告诉媒人,由媒人负责跟其他人交互. * @param says */ public void tryst(String says){ System.out.println("男人提出约会请求,说:"+says); mat.doManTryst(says); }
}
package meditator;
/** * <p>Title: 男方家长类</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: 乐开工作室</p> * @author 陈少坤 * @version 1.0 */
public class ManParent { private Matchmaker mat; //媒人类 public ManParent(Matchmaker mat) { this.mat = mat; mat.registeManParent(this); //把自己在媒人那里注册(声明) }
public static void main(String[] args) { //ManParent manParent1 = new ManParent(); }
/** *考虑是否同意 * @return */ public boolean thinking(String says) { System.out.println("男方父母考虑:我们做父母的该不该同意呢???"); if (says.length() > 5){ System.out.println("我们做父母的同意了"); return true; } else{ System.out.println("我们做父母的不同意."); return false; }
}
}
/////////////////////////////////////////////////////////////
package meditator;
/** * <p>Title:女人类 </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: 乐开工作室</p> * @author 陈少坤 * @version 1.0 */
public class Woman { private Matchmaker mat; // 媒人
public Woman(Matchmaker mat) { this.mat=mat; mat.registeWoman(this); //把自己在媒人那里注册(声明) } public static void main(String[] args) {
}
/** *考虑是否同意 * @return */ public boolean thinking(String says) { System.out.println("女人考虑:我该不该同意呢???"); if (says.length() > 5){ System.out.println("我同意了"); return true; } else{ System.out.println("我不同意."); return false; }
}
/** * 提出约会 * 女人提出约会,只需要告诉媒人,由媒人负责跟其他人交互. * @param says */ public void tryst(String says){ System.out.println("女人提出约会请求,说:"+says); mat.doWomanTryst(says); }
}
////////////////////////////////////////////////////////
package meditator;
/** * <p>Title: 女方家长类</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: 乐开工作室</p> * @author 陈少坤 * @version 1.0 */
public class WomanParent { private Matchmaker mat; //媒人类 public WomanParent(Matchmaker mat) { this.mat=mat; mat.registerWomanParent(this); //把自己在媒人那里注册(声明) } public static void main(String[] args) { //WomanParent womanParent1 = new WomanParent(); }
/** *考虑是否同意 * @return */ public boolean thinking(String says) { System.out.println("女方父母考虑:我们做父母的该不该同意呢???"); if (says.length() > 5){ System.out.println("我们做父母的同意了"); return true; } else{ System.out.println("我们做父母的不同意."); return false; }
}
}
///////////////////////////////////////////////////////////////
package meditator; /** * <p>Title:媒人类-----中介者 </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: 乐开工作室</p> * @author 陈少坤 * @version 1.0 */
public class Matchmaker { private Man man; //男人 private Woman woman; //女人 private ManParent manp; //男方父母 private WomanParent womanp; //女方父母 Matchmaker() { } public static void main(String[] args) { Matchmaker matchmaker1 = new Matchmaker(); }
/** * 媒人处理男人提出的约会, * 男人提出约会,则只需要把该问题告诉媒人, * 由媒人负责去跟其女方,女方父母,男方家长交互 * @param says */ public void doManTryst(String says) { System.out.println("媒人开始处理约会问题开始"); woman.thinking(says); manp.thinking(says); womanp.thinking(says); System.out.println("媒人处理约会问题结束,根据同意的结果做其他处理"); }
/** * 媒人处理女人提出的约会, * 由媒人负责去跟男方,女方父母,男方家长交互 * @param says */ public void doWomanTryst(String says) { System.out.println("媒人开始处理约会问题开始"); man.thinking(says); manp.thinking(says); womanp.thinking(says); System.out.println("媒人处理约会问题结束,根据同意的结果做其他处理"); }
/** * 处理彩礼等其他问题..... * @param man */ public void doOther(String says) { System.out.println("处理其他问题"); man.thinking(says); woman.thinking(says); manp.thinking(says); womanp.thinking(says); }
//以下四个注册方法,可以理解为,男方和女方之间的通讯必须通过媒人 /** * 注册男人 * @param man */ public void registeMan(Man man){ this.man=man; }
/** * 注册女人 * @param woman */ public void registeWoman(Woman woman){ this.woman=woman; }
/** * 注册男方家长 * @param manp */ public void registeManParent(ManParent manp) { this.manp = manp;
}
/** *注册女方家长 * @param womanp */
public void registerWomanParent(WomanParent womanp){ this.womanp = womanp; }
}
package meditator;
/** * <p>Title: 测试类---可以运行该类</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: 乐开工作室</p> * @author 陈少坤 * @version 1.0 */
public class MatchmakerDemo {
public MatchmakerDemo() { }
public static void main(String[] args) { MatchmakerDemo matchmakerDemo1 = new MatchmakerDemo(); Matchmaker mat = new Matchmaker(); //媒人出现 Man man = new Man(mat);//男人,以媒人为建立构造参数 Woman woman=new Woman(mat); ManParent manp=new ManParent(mat); WomanParent womanp=new WomanParent(mat); //////////////// System.out.println("///////////////////////////////////////////////////");; man.tryst("我想和你约会,可以吗?"); //////////////// System.out.println("///////////////////////////////////////////////////");; woman.tryst("想和你约会");
}
} 
|