Mam pewną hierarchię klas dziedziczących po sobie, każda z nich implementuję tę samą metodę i każda z tych implementacji wywołuje metodę superklasy - z grubsza przedstawia się to tak:
class A {
public String doSth(){
return stringBasedOnClassAFields;
}
}
class B extends A {
@Override
public String doSth(){
stringBasedOnClassBandAFields = stringBasedOnClassBFields + super.doSth();
return stringBasedOnClassBandAFields;
}
}
class C extends B {
@Override
public String doSth(){
stringBasedOnClassCBandAFields = stringBasedOnClassCFields + super.doSth();
return stringBasedOnClassCBandAFields;
}
}
Chodzi o to, że każda z kolejnych klas dziedziczących zawiera dodatkowe pola a metoda doSth zwraca jakąś konkretną reprezentację takiego przypadku biorąc pod uwagę jej wszystkie superklasy.
- Czy to jest poprawny design? Szczerze mówiąc, nie podoba mi się wywoływanie super. ale totalnie nie wiem jakim patternem to zastąpić. Próbowałem przepisać to na composition ale mam wrażenie, że nie rozwiązuje to mojego problemu, bo super.doSth() byłoby zastąpione wywołaniem objectA.doSth a sama hierarchia byłaby mniej czytelna.
- Jak wygląda kwestia testowania takiego kodu? zamokować super.doSth i robić assercje tylko na wartości zwróconej przez doSth() bazującej na wartościach pojedyńczej klasy?
Chętnie uszczegółowię pytanie jeśli coś pominąłem, nie chciałem żeby przykład stał się mało czytelny.