阅读Effective Java,我从Item 16: Favor composition over inheritance
.
在下面InstrumentedSet
,这本书展示了我们可以跟踪元素被插入的次数(通过InstrumentedSet.addCount
变量)。
为此,我们可以简单地附加到这个类对象的addCount
,然后调用ForwardingSet.add()
,它调用实际Set
类的实际实现add()
。
// Reusable forwarding class
public class ForwardingSet<E> implements Set<E> {
private final Set<E> s;
public ForwardingSet(Set<E> s) { this.s = s; }
public void clear() { s.clear(); }
public boolean contains(Object o) { return s.contains(o); }
...
}
// Wrapper class - uses composition in place of inheritance
public class InstrumentedSet<E> extends ForwardingSet<E> {
private int addCount = 0;
public InstrumentedSet(Set<E> s) { super(s); }
@Override public boolean add(E e) {
addCount++;
return super.add(e);
}
...
}
我是否正确理解,要使用这种模式/方法,Forwarding*
类必须调用其所有父类的方法(在这种情况下Set
)?