有问题的模式涉及一个抽象类,它有一个方法可以完成一些工作,然后调用一个抽象方法。该类通过在匿名类中进行子类化并指定抽象方法的行为来使用。一个例子:
/* 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 :(得分:5)
它被称为Template Method并且与匿名类的使用没有特别关系 - 这是一个实现细节。
答案 1 :(得分:1)
看起来像http://en.wikipedia.org/wiki/Template_method_pattern。您在抽象类中提供骨架实现,并在子类中定义抽象方法。这种模式来自GoF书。