從Java和C#世界的到來,做這樣的事情的想法讓我畏縮= P。 (不是說有條件地繼承一個類的想法很糟糕 - 我只是不習慣它。)
考慮一下,如果這個問題是關於Java的話,我會這樣做。我張貼的模式 - 實現一個接口,然後用一個工廠的實現之間進行選擇 - 以提供另一個角度想問題:
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;
}
}
肯定有很多更多的代碼,但它是在一個合適的解決方案一個強類型的環境。
編輯:一個顯著差異我我的答案和原題之間注意到:
如果你有條件地從多個不同的類繼承,那麼超包含取決於你使用的操作系統代碼,而從它們繼承的類包含所有操作系統相同的代碼。繼承鏈的頂部與操作系統有關;底部不是。
我的方法是另一種方式。接口(或超類)定義了所有平臺類似的方法,而不同的實現(或子類)具有與操作系統相關的代碼。繼承鏈的頂端是操作系統不可知的。
+1打我吧。 ;) –
所以......美麗。 – corazza
女士們,先生們,讓我們來聽聽Python。 –