小A:“师兄,如果能举个例子的话,那就更好了。”
大B:“好。没问题的。那就举个通俗的模式吧!就拿一个男人和女人通过媒人约会的例子来实现这种设计模式吧。”
1、明确,男人和女人如果约会,假设男方提出约会(女方提出过程类似)。如果没有媒人,该过程如下:
A、男方如果想和女方约会
B、首先请示自己的父母(假设是封建家庭哦……),
C、然后通知女方
D、女方需要请示女方父母,是否同意约会。
弊端:需要男方交换的对象太多,且关系复杂,当随着男女之间的交往的复杂,会涉及到更多复杂的交换,双方父母的交换也很更复杂,使得四个对象(男、女、男方家长、女方家长)关系复杂,难以控制。
模式改进:采取媒人做‘中介者’-模式,将变得简单,其中无论那一个人有什么要求,请求,只需要告诉‘媒人’,至于该请求需要告诉谁,和谁交换,只有媒人知道。
//模拟代码类如下:
packagemeditator;
/**
*/
publicclassMan{
privateMatchmakermat;//媒人
publicMan(Matchmakermat){
this.mat=mat;
mat.registeMan(this);//把自己在媒人那里注册(声明)
}
publicstaticvoidmain(String[]args){
}
/**
*考虑是否同意
*@return
*/
publicbooleanthinking(Stringsays){
System.out.println(“男人考虑:我该不该同意呢……”);
if(says.length()>5){
System.out.println(“我同意了”);
returntrue;
}
else{
System.out.println(“我不同意。”);
returnfalse;
}
}
/**
*提出约会
*男人提出约会,只需要告诉媒人,由媒人负责跟其他人交互。
*@paramsays
*/
publicvoidtryst(Stringsays){
System.out.println(男人提出约会请求,说:+says);
mat.doManTryst(says);
}
}
packagemeditator;
/**
*《p》Title:男方家长类《/p》
*《p》Description:《/p》
*@version1.0
*/
publicclassManParent{
privateMatchmakermat;//媒人类
publicManParent(Matchmakermat){
this.mat=mat;
mat.registeManParent(this);//把自己在媒人那里注册(声明)
}
}
/**
*考虑是否同意
*@return
*/
publicbooleanthinking(Stringsays){
System.out.println(“男方父母考虑:我们做父母的该不该同意呢……”);
if(says.length()>5){
System.out.println(“我们做父母的同意了”);
returntrue;
}
else{
System.out.println(“我们做父母的不同意。”);
returnfalse;
}
}
}
/////////////////////////////////////////////////////////////
packagemeditator;
/**
*《p》Title:女人类《/p》
*《p》Description:《/p》
*/
publicclassWoman{
privateMatchmakermat;//媒人
publicWoman(Matchmakermat){
this.mat=mat;
mat.registeWoman(this);//把自己在媒人那里注册(声明)
}
/**
*考虑是否同意
*@return
*/
publicbooleanthinking(Stringsays){
System.out.println(“女人考虑:我该不该同意呢……”);
if(says.length()>5){
System.out.println(“我同意了”);
returntrue;
}
else{
System.out.println(“我不同意。”);
returnfalse;
}
}
/**
*提出约会
*女人提出约会,只需要告诉媒人,由媒人负责跟其他人交互。
*@paramsays
*/
publicvoidtryst(Stringsays){
System.out.println(女人提出约会请求,说:+says);
mat.doWomanTryst(says);
}
}
////////////////////////////////////////////////////////
packagemeditator;
/**
*《p》Title:女方家长类《/p》
*《p》Description:《/p》
*/
publicclassWomanParent{
privateMatchmakermat;//媒人类
publicWomanParent(Matchmakermat){
this.mat=mat;
mat.registerWomanParent(this);//把自己在媒人那里注册(声明)
}
/**
*考虑是否同意
*@return
*/
publicbooleanthinking(Stringsays){
System.out.println(“女方父母考虑:我们做父母的该不该同意呢……”);
if(says.length()>5){
System.out.println(“我们做父母的同意了”);
returntrue;
}
else{
System.out.println(“我们做父母的不同意。”);
returnfalse;
}
}
}
///////////////////////////////////////////////////////////////
packagemeditator;
/**
*《p》Title:媒人类——中介者《/p》
*《p》Description:《/p》
*@version1.0
*/
publicclassMatchmaker{
privateManman;//男人
privateWomanwoman;//女人
privateManParentmanp;//男方父母
privateWomanParentwomanp;//女方父母
Matchmaker(){
}
publicstaticvoidmain(String[]args){
Matchmakermatchmaker1=newMatchmaker();
}
/**
*媒人处理男人提出的约会,
*男人提出约会,则只需要把该问题告诉媒人,
*由媒人负责去跟其女方,女方父母,男方家长交互
*@paramsays
*/
publicvoiddoManTryst(Stringsays){
System.out.println(“媒人开始处理约会问题开始”);
womanp.thinking(says);
System.out.println(“媒人处理约会问题结束,根据同意的结果做其他处理”);
}
/**
*媒人处理女人提出的约会,
*由媒人负责去跟男方,女方父母,男方家长交互
*@paramsays
*/
publicvoiddoWomanTryst(Stringsays){
System.out.println(“媒人开始处理约会问题开始”);
man.thinking(says);
manp.thinking(says);
womanp.thinking(says);
System.out.println(“媒人处理约会问题结束,根据同意的结果做其他处理”);
}
/**
*处理彩礼等其他问题……
*@paramman
*/
publicvoiddoOther(Stringsays){
System.out.println(“处理其他问题”);
man.thinking(says);
woman.thinking(says);
manp.thinking(says);
womanp.thinking(says);
}
//以下四个注册方法,可以理解为,男方和女方之间的通讯必须通过媒人
/**
*注册男人
*@paramman
*/
publicvoidregisteMan(Manman){
this.man=man;
}
/**
*注册女人
*@paramwoman
*/
publicvoidregisteWoman(Womanwoman){
this.woman=woman;
}
/**
*注册男方家长
*@parammanp
*/
publicvoidregisteManParent(ManParentmanp){
this.manp=manp;
}
/**
*注册女方家长
*@paramwomanp
*/
publicvoidregisterWomanParent(WomanParentwomanp){
this.womanp=womanp;
}
}
packagemeditator;
/**
*《p》Title:测试类——可以运行该类《/p》
*《p》Description:《/p》
*《p》Copyright:Copyright(c)2004《/p》
*@version1.0
*/
publicclassMatchmakerDemo{
publicMatchmakerDemo(){
}
publicstaticvoidmain(String[]args){
MatchmakerDemomatchmakerDemo1=newMatchmakerDemo();
Matchmakermat=newMatchmaker();//媒人出现
Manman=newMan(mat);//男人,以媒人为建立构造参数
Womanwoman=newWoman(mat);
ManParentmanp=newManParent(mat);
WomanParentwomanp=newWomanParent(mat);
////////////////
System.out.println(“///////////////////////////////////////////////////”);
man.tryst(“我想和你约会,可以吗?”);
////////////////
System.out.println(“///////////////////////////////////////////////////”);
woman.tryst(“想和你约会”);
}
}