Я прохожу через Effective Java, Item-16 Favor composition over inheritance
.Я посмотрел на Forwarding class
пример ниже.
Мне интересно, какой смысл иметь класс ForwardingSet
?InstrumentedSet
может очень хорошо реализовать Set
и иметь частный экземпляр этого, который вызывает все методы.
Будет ли способствовать повторному использованию и предотвращать избыточность, если в будущем у нас будет больше InstrumentedSet
классов, которые просто должны сделать что-то в дополнение к базовому поведению?Это просто дизайн будущего или есть что-то еще, чего мне не хватает?
// 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);
}
...
}