Mam klasę abstrakcyjną Ship</code> z metodą <code class="csharp">public abstract bool PlacementCheck(int x, int y, ShipRotation rot)
oraz dziedziczące po niej 5 klas różnych statków przesłaniające tą metodę. Trzy z tych metod nadpisujących są prawie identyczne, różnią się jedną stałą, którą mogę umieścić jako pole w metodzie. Czy mogę to jakoś zoptymalizować żeby dla tych trzech klas nie przepisywać tego samego?
0
4
Opcje są dwie:
- Napisać implementacje w klasie bazowej a nadpisywać tylko tam gdzie potrzebujesz "innej" implementacji. Sprawdza sie to kiedy masz jedna "wspólną" i kilka zupełnie innych i kiedy nie wymaga to dodatkowych danych.
- Rozwiązanie bardziej ogólne: delegacja. Zrób interfejs PlacementChecker i niech klasa dziedzicząca ma implementacje tego interfejsu jako swoje pole. Wtedy ta twoja metoda to:
public bool PlacementCheck(int x, int y, ShipRotation rot){
getChecker().check(x,y,rot);
}
Plus jest taki, że możesz dzięki temu obługiwać sytuacje kiedy np. dwa statki mają taką samą logikę sprawdzania, dwa inne mają taką samą i dwa kolejne taką samą.