微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

使用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] 举报,一经查实,本站将立刻删除。

相关推荐