加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 16:59:47 所属栏目:大数据 来源:网络整理
导读:使用Groovy的Adapter模式来处理遗留代码 如果使用Java语言,针对一个遗留的类Circle,需要建立一个接口,再建立新类和遗留类的适配器实现该接口,再建立一个控制器: /**/ /* ?*?Adapter模式经常用来处理遗留代码 ? */ package ?com.XiongYi.designPatterns;

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

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

/*

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

?
*/

package ?com.XiongYi.designPatterns;


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

class?Circle {

????
public?void?draw()
{

????????System.out.println(
"I'm?a?circle..."
);

????}

}


// 现要由于新的需要?要加入一些和Circle地位等价类,比如其中一个叫做Rect

//
并要让另一个扮演控制角色的Person类的方法draw()来统一操纵它们


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

interface?Drawable {

????
public?void
?draw();

}


//再让原有Circle的适配器CircleAdapter实现Drawable

class?CircleAdapter?implements?Drawable {

????
private
?Circle?circle;

????
public?CircleAdapter()
{

????????circle?
=?new
?Circle();

????}

????
public?void?draw()?{

????????circle.draw();

????}

}


//加入的Rect类

class?Rect {

????
public?void?draw()
{

????????System.out.println(
"I'm?a?rect..."
);

????}

}


//同样也让Rect的适配器RectAdapter实现Drawable

class?RectAdapter?implements?Drawable {

????
private
?Rect?rect;

????
public?RectAdapter()
{

????????rect?
=?new
?Rect();

????}

????
public?void?draw(){

????????rect.draw();

????}

}


// 最后扮演控制角色的Person类,

//它可以通过work方法根据传入的实现了Drawable接口的对象来统一控制它们工作了

class?Person {

????
private
?Drawable?drawable;

????
public?Person(Drawable?drawable)
{

????????
this.drawable?=
?drawable;

????}

????
public?void?work(){

????????drawable.draw();

????}

}


public?class?Adapter? {

????
public?static?void?main(String[]?args)
{

????????

????????
new?Person(new
?CircleAdapter()).work();

????????
new?Person(new
?RectAdapter()).work();

????????

????}

}

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

package
?com.XiongYi.groovy.designPatters


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

class?Circle {

????def?draw()
{

????????println?
"I'm?a?circle..."

????}

}


//现在加入Rect类

class?Rect {

????def?draw()
{

????????println?
"I'm?a?rect..."

????}

}


//Person类扮演控制者的角色

class?Person {

????
private
?def?graphic

????Person(args)
{

????????graphic?
=
?args

????}

????def?draw()
{

????????
try
{

????????????graphic.draw()

????????}
catch(MissingMethodException?e)
{

????????????println?
"U?can't?draw..."

????????}

????}

}


class?Adapter? {

????
static?void?main(args)?
{

????????
new?Person(new
?Circle()).draw()

????????
new?Person(new
?Rect()).draw()

????}

}

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

欢迎讨论。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读