使用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@H_870_502@...
{

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)...@H_404_801@{


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的动态语言特性,可以将类型判定一直延后到运行时进行,代码变得如此简单。
欢迎讨论。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。