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

欢迎讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值