当前位置: 代码迷 >> Web前端 >> 运用Groovy的Adapter模式来处理遗留代码
  详细解决方案

运用Groovy的Adapter模式来处理遗留代码

热度:407   发布时间:2012-10-24 14:15:58.0
使用Groovy的Adapter模式来处理遗留代码

使用Groovy的Adapter模式来处理遗留代码

如果使用Java语言,针对一个遗留的类Circle,需要建立一个接口,再建立新类和遗留类的适配器实现该接口,再建立一个控制器:

/**//*
*Adapter模式经常用来处理遗留代码
*/

packagecom.XiongYi.designPatterns;

//遗留代码Circle类方法drawCircle()这个类不便做更改

classCircle...{
publicvoiddraw()...
{
System.out.println(
"I'macircle..."
);
}

}


//现要由于新的需要要加入一些和Circle地位等价类,比如其中一个叫做Rect
//
并要让另一个扮演控制角色的Person类的方法draw()来统一操纵它们

//于是,创建接口Drawable,并让Circle的适配器和Rect的适配器代替他们各自工作

interfaceDrawable...{
publicvoid
draw();
}


//再让原有Circle的适配器CircleAdapter实现Drawable
classCircleAdapterimplementsDrawable...{
private
Circlecircle;
publicCircleAdapter()...
{
circle
=new
Circle();
}

publicvoiddraw()...{
circle.draw();
}

}


//加入的Rect类
classRect...{
publicvoiddraw()...
{
System.out.println(
"I'marect..."
);
}

}


//同样也让Rect的适配器RectAdapter实现Drawable
classRectAdapterimplementsDrawable...{
private
Rectrect;
publicRectAdapter()...
{
rect
=new
Rect();
}

publicvoiddraw()...{
rect.draw();
}

}


//最后扮演控制角色的Person类,
//它可以通过work方法根据传入的实现了Drawable接口的对象来统一控制它们工作了

classPerson...{
private
Drawabledrawable;
publicPerson(Drawabledrawable)...
{
this.drawable=
drawable;
}

publicvoidwork()...{
drawable.draw();
}

}


publicclassAdapter...{
publicstaticvoidmain(String[]args)...
{

newPerson(new
CircleAdapter()).work();
newPerson(new
RectAdapter()).work();

}

}

而使用Groovy的话,则变得超级简单:

packagecom.XiongYi.groovy.designPatters

//遗留代码Circle类方法drawCircle()这个类不便做更改

classCircle...{
defdraw()
...
{
println
"I'macircle..."

}

}


//现在加入Rect类
classRect...{
defdraw()
...
{
println
"I'marect..."

}

}


//Person类扮演控制者的角色
classPerson...{
private
defgraphic
Person(args)
...
{
graphic
=
args
}

defdraw()
...{
try...
{
graphic.draw()
}
catch(MissingMethodExceptione)...
{
println
"Ucan'tdraw..."

}

}

}


classAdapter...{
staticvoidmain(args)...
{
newPerson(new
Circle()).draw()
newPerson(new
Rect()).draw()
}

}

可见,正是Groovy的动态语言特性,可以将类型判定一直延后到运行时进行,代码变得如此简单。

欢迎讨论。

?

文章系本人原创,转载请注明作者和出处

  相关解决方案