`

使用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可以提升开发效率,简化代码,增强灵活性。无论是作为嵌入式脚本快速实现功能,还是作为类库扩展Java项目,或者是在Grails或Spring Boot框架中使用,Groovy都能为Java开发者带来诸多...

    Groovy in Action源代码

    通过源代码,你可以看到如何使用MetaClass、ExpandoMetaClass等来扩展类的功能,实现动态属性和方法。 4. **GString与模板引擎**:Groovy的GString能方便地进行字符串插值,源代码中可能会包含使用GString构建动态...

    groovy入门经典,groovyeclipse 插件

    Groovy也支持使用`def`关键字来定义未指定类型的变量。 闭包是Groovy的一个核心特性,它类似于函数指针,可以被用作参数传递或者作为返回值。闭包在Groovy中的定义形式通常为`{参数列表 -> 代码块}`。闭包的this...

    groovy in action 中文版 2017.11

    并且提到了Groovy的IDE和编辑器支持情况,以及一些Groovy的基础知识,如类和对象的声明、使用脚本、处理文本、数字、列表、映射和范围,以及如何在Java环境中运行Groovy代码。 需要注意的是,文档中出现的金融信息...

    JVM 动态执行Groovy脚本的方法

    本文将详细讲解如何使用JVM动态执行Groovy脚本的方法,主要包括利用JShell执行代码、调试模式下动态执行代码以及利用javax.script包执行Groovy脚本。以下是对各知识点的详细说明。 1. 利用JShell执行代码 Java 9 ...

    eclipse安装groovy插件的步骤

    接下来,我们来详细介绍如何在 Eclipse 中使用 Groovy 进行简单的编程实践。 1. **新建 Java 项目**:在 Eclipse 中,通过 File > New > Java Project 菜单创建一个新的 Java 项目。 2. **给项目添加 Groovy 属性*...

    Groovy入门教程[参照].pdf

    3.兼容 Java:Groovy 可以与 Java 语言混合使用,Groovy 代码可以调用 Java 代码,反之亦然。 开发环境 1. JDK 1.5 以上 2. Eclipse + Groovy 插件(支持 Groovy 1.5.7) 创建 Groovy 项目 1. 新建一个 Java ...

    Groovy在Spring中的简单使用

    在测试中,可以使用 Spring 的 ApplicationContext 来获取 helloWorldService bean,并调用其 sayHello 方法,以验证 Groovy 脚本的正确性。 Groovy 在 Spring 中的使用可以带来许多好处,例如可以动态修改业务逻辑...

    groovy

    Groovy是一种基于Java平台的、动态的、强大的编程...无论是编写脚本、开发Web应用还是进行数据处理,Groovy都是值得学习和使用的强大工具。通过深入理解和实践,开发者可以充分利用Groovy提高工作效率,提升项目质量。

    groovy速查手册

    - 使用`groovy.util.Eval`类来评估存储在Java字符串中的简单代码。 - 通过`groovy.util.GroovyShell`提供更灵活的绑定和可选的预解析功能。 #### 三、语言元素 Groovy提供了丰富的语言元素,包括但不限于: - **...

    Groovy Script 入门

    1. **创建Groovy文件**:使用文本编辑器创建一个名为hello.groovy的文件,并输入以上代码。 2. **执行脚本**:打开命令行窗口,导航至包含hello.groovy文件的目录,然后输入`groovy hello`来运行脚本。 #### 四、...

    groovy-sdk-4.0.3

    总的来说,Groovy SDK 4.0.3是一个完整的开发环境,它为Groovy开发者提供了编写、测试和运行代码所需的所有工具,是学习和使用Groovy语言的重要资源。通过安装和配置这个SDK,你可以开始探索Groovy的动态世界,体验...

    groovy和Java相互调用1

    这里,我们首先创建一个`GroovyClassLoader`来解析Groovy源文件,然后通过`newInstance`方法实例化Groovy类,并使用`invokeMethod`来调用特定的方法。 这种Java与Groovy的交互能力使得开发者可以灵活地利用两种语言...

    java在嵌入运行groovy代码1

    如果你的 Groovy 脚本是一个完整的类结构,包括 `main` 方法,你可以使用 `GroovyShell` 来执行 `main` 方法并传递参数,就像下面的代码所示: ```java String[] args = new String[]{"Zhangsan", "10"}; Binding ...

    Java调用Groovy,实时动态加载数据库groovy脚本

    Java作为一种广泛使用的静态类型编程语言,有时候可能无法满足所有需求,特别是在处理动态代码执行和热部署时。此时,Groovy这种基于JVM的动态语言就发挥了重要作用。本文将详细讲解如何在Java应用程序中调用Groovy...

    Groovy安装以及简单使用

    Groovy是一种基于Java平台的动态...总的来说,Groovy的安装和使用并不复杂,它为Java开发者带来了新的可能性,提供了更简洁、动态的编程体验。通过深入学习和实践,我们可以利用Groovy的优势提高生产力,解决实际问题。

    干货:Jenkins Pipeline调用shell、python、java、groovy脚本的正确使用姿势.doc

    例如在服务器上执行 shell 命令、运行 python 或者 java 测试代码以及使用 groovy 脚本来实现一些更为复杂的功能等等。 执行 shell 命令 在 Jenkins Pipeline 中,使用 `sh` 指令可以执行 shell 命令。例如,使用 ...

    Groovy 动态修改XML

    此外,可能还会提到如何在大型项目中使用Groovy来提高XML处理的效率和可维护性。 总而言之,Groovy提供了一种高效且灵活的方式来处理XML,使得动态修改XML文档变得轻而易举。通过学习和掌握这些知识,开发者可以在...

Global site tag (gtag.js) - Google Analytics