2014-03-05 41 views
3

所讨论的模式涉及一个抽象类,它具有一些可以工作的方法,然后调用抽象方法。该类用于在匿名类中进行子类化,并指定抽象方法的行为。举个例子:在Java中使用匿名类的模式有没有名称?

/* The abstract class */ 
abstract class WebCall { 
    String url; 

    WebCall(String url) { 
     this.url = url; 
    } 

    void call() { 
     // Make call to url 
     // Callback 
     if (worked) { 
      success(); 
     } else { 
      failure(); 
     } 
    } 

    protected abstract void success(); 

    protected abstract void failure(); 

} 

和你会使用类,像这样:

new WebCall(someUrl) { 
    @Override 
    protected void success() { 
     // Implementation 
    } 

    @Override 
    protected void failure() { 
     // Implementation 
    } 
}.call(); 

一个现实世界的例子是从Android的AsyncTask。这种模式有一个共同的名字吗?

+0

听起来像一个功课问题? – Fuhrmanator

+0

没有。我在AsycTask的Android项目中使用它,并且使用该模式昨天重构了一个混乱的异步webcall,这让我想知道它是否有名字。 – evanjdooner

回答

5

它被称为Template Method并且与使用匿名类没有特别的关系 - 这是一个实现细节。

+0

好的。我明白,匿名类不是强制性的,但这是我看到它使用的唯一方式。 – evanjdooner