大话设计模式
字体: 16 + -

第75章

小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(“想和你约会”);

}

}