`

使用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的动态语言特性,可以将类型判定一直延后到运行时进行,代码变得如此简单。

欢迎讨论。

 

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

分享到:
评论

相关推荐

    Java中使用Groovy的三种方式

    Java中使用Groovy的三种方式,详细见我的博客。

    Groovy DSL

    使用Groovy可以快速灵活完成文本处理,数据库访问,XML处理等常见任务。研究表明,使用Groovy比使用Java写程序,代码量少3-10倍。 DSL是新一代基于领域设计专用语言。由于Groovy的超级灵活性,你可以使用Groovy快速...

    Groovy in Action源代码

    Groovy in Action的源代码。Groovy in Action的源代码。

    精通 Groovy--下一代开发语言

    Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有...

    microservices-spring-boot-groovy:使用 Spring Boot 和 Groovy 构建微服务

    微服务-spring-boot-groovy 使用 Spring Boot 和 Groovy 构建微服务创建这些项目是为了在当地的达拉斯 Groovy Grails 用户组会议上展示微服务架构这些服务使用您需要安装才能开始使用的各种外部服务。 您将需要安装 ...

    groovy入门经典,groovyeclipse 插件

    groovy入门经典,groovyeclipse 插件

    groovy-3.0.9-API文档-中文版.zip

    赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.codehaus.groovy:groovy:3.0.9; 标签...

    apache-groovy-sdk-2.4.11

    本文适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java开发人员。了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的...最重要的是,您将学会如何在日常 Java 应用程序开发中联合使用 Groovy 和 Java 代码。

    groovy_eclipse插件

    groovy_eclipse插件

    Java Groovy结合使用

    概述主要介绍Java、spring与groovy结合使用,高清英文版本

    Groovy v2.4.13官方版

     Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 ...

    groovy-all-2.4.13-API文档-中文版.zip

    赠送源代码:groovy-all-2.4.13-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.13.pom; 包含翻译后的API文档:groovy-all-2.4.13-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.codehaus.groovy:...

    groovy和Java相互调用1

    Groovy 调用 Java 类groovy 调用 Java class 十分方便,只需要在类前导入该 Java 类,在 Groovy 代码中就可以无缝使用该

    一些groovy的实例代码--免费下载

    一些groovy的实例代码,需要的朋友就赶紧下载吧

    groovy-3.0.9-API文档-中英对照版.zip

    赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.codehaus.groovy:groovy:...

    java动态代码执行

    基于groovy框架,进行的简单java动态代码执行;附件中包含java调用groovy具体的代码实现,及测试方法。

    微服务项目中添加groovy文件技巧.docx

    而在微服务项目中直接添加.groovy文件,存在热点引用不可用问题,即代码中添加一个对象时,编译器不认识则在对象下面画一条横线,而当鼠标移到这个对象时,弹不出可引用包的列表。本文论述了解决这个问题的技巧。

    groovy-2.5.1-API文档-中文版.zip

    赠送源代码:groovy-2.5.1-sources.jar; 赠送Maven依赖信息文件:groovy-2.5.1.pom; 包含翻译后的API文档:groovy-2.5.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.codehaus.groovy:groovy:2.5.1; 标签...

    Beginning_Groovy_and_Grails开源项目教学代码

    Beginning_Groovy_and_Grails_From_Novice_to_Professional开源项目教学代码配合Beginning_Groovy_and_Grails教材使用全是原代码开源。由于上传限制分8个部分

    apache-groovy-sdk-3.0.9.zip

    本文适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java开发人员。了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的...最重要的是,您将学会如何在日常 Java 应用程序开发中联合使用 Groovy 和 Java 代码

Global site tag (gtag.js) - Google Analytics