直接或间接委派(通过抽象方法)是否有优势? (我直接编造了条款"""间接&#34 ;;我不知道这些是否正确。)
以Google Guava' ForwardingList为例。
Google选择通过抽象方法间接实施授权。
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();
}
}
再说一次是否有优势?如果可能,请提供一个简单的用例,以选择直接或间接授权。
答案 0 :(得分:1)
“间接授权”比“直接授权”更普遍/更少限制。假设您正在编写扩展ForwardingList的A类。如果你使用直接委托,那么你需要将列表的实例传递给A的构造函数。现在,如果基础列表的构造是非常昂贵的操作,并且对A.size()的调用并不总是由A的用户可能想要懒惰地初始化基础列表以提高性能。那就是“间接授权”变得有用的时候。