这个模式的名称是否在Java中使用匿名类?

时间:2014-03-05 12:42:14

标签: design-patterns

有问题的模式涉及一个抽象类,它有一个方法可以完成一些工作,然后调用一个抽象方法。该类通过在匿名类中进行子类化并指定抽象方法的行为来使用。一个例子:

/* 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。这种模式有一个共同的名称吗?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

看起来像http://en.wikipedia.org/wiki/Template_method_pattern。您在抽象类中提供骨架实现,并在子类中定义抽象方法。这种模式来自GoF书。