从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。 –