直接或间接委托(抽象方法)?
问题描述:
直接或间接授权(通过抽象方法)有优势吗? (我编造了术语“直接”和“间接”;我不知道这些是否正确)。直接或间接委托(抽象方法)?
以Google Guava的ForwardingList为例。
谷歌选择通过抽象方法间接实施代表团。
public abstract class ForwardingList<T>
extends List<T> {
protected ForwardingList() { }
protected abstract List<T> delegate();
@Override
public int size() {
return delegate().size();
}
}
可替换地,此类可以通过接受List
作为构造器参数来实现。
public abstract class ForwardingList<T>
extends List<T> {
private final List<T> list;
protected ForwardingList(List<T> list) {
this.list = list;
}
@Override
public int size() {
return list.size();
}
}
再说一遍:是否有一个优于另一个?如果可能的话,请提供一个简单的用例来优先直接或间接授权。
答
“间接授权”比“直接授权”更普遍/更少限制。假设你正在编写扩展ForwardingList的类A.如果您使用直接委派,那么您需要将列表实例传递给A的构造函数。现在,如果底层列表的构造操作非常昂贵,并且对A.size()的调用并不总是由A的用户可能需要懒惰地初始化底层列表以提高性能。那就是当“间接授权”变得有用时。
+0
好点;谢谢。 – kevinarpe 2014-11-02 04:54:08
看起来就像是[Double dispatch](http://en.wikipedia.org/wiki/Double_dispatch)在行动中的一个例子。 – 2014-11-02 04:15:43