Jadąc ze świata Java i C#, myśl robi coś takiego sprawia, że warować = P. (Nie jest tak, że pomysł warunkowego dziedziczenia klasy jest zły - po prostu nie jestem do tego przyzwyczajony.)
Myśląc o tym przez chwilę, zrobiłbym coś takiego, jeśli to pytanie dotyczyło Javy. Jestem delegowania wzór - implementować interfejs, a następnie użyć fabrykę, aby wybrać pomiędzy wdrożeń - w celu zapewnienia innego punktu widzenia problemu:
public interface OsDependent {
public void doOsDependentStuff();
}
public class WindowsDependentComponent implements OsDependent {
@Override
public void doOsDependentStuff() {
//snip
}
}
public class AppleDependentComponent implements OsDependent {
@Override
public void doOsDependentStuff() {
//snip
}
}
public class OsDependentComponentFactory {
public OsDependent getOsDependentComponent(Platform platform) {
if(platform == Platform.WINDOWS)
return new WindowsDependentComponent();
else if(platform == Platform.APPLE)
return new AppleDependentComponent();
else
return null;
}
}
pewno dużo więcej kodu, ale jest to właściwe rozwiązanie w mocno wpisane środowisko.
EDIT: Jedna istotna różnica między zauważyłem moją odpowiedź i oryginalne pytanie:
Jeśli warunkowo dziedziczyć z wielu różnych klas, wówczas superklasy zawierać kod, który zależy od rodzaju systemu operacyjnego używasz, podczas gdy klasa, która dziedziczy po nich, zawiera kod, który jest taki sam dla wszystkich systemów operacyjnych. Górna część łańcucha dziedziczenia zależy od systemu operacyjnego; dno nie jest.
Moje podejście idzie w drugą stronę. Interfejs (lub superklasa) OsDepndent
definiuje metody, które są podobne dla wszystkich platform, podczas gdy różne implementacje (lub podklasy) mają kod zależny od systemu operacyjnego. Górny łańcuch dziedziczenia jest niezależny od OS.
+1 mnie uprzedził . ;) –
Więc ... Piękna. – corazza
Panie i panowie, posłuchajmy go dla Pythona. –