坦率地说,我认为开放/封闭原则更多是过时的。从80年代和90年代开始,OO框架是基于以下原则构建的:所有事物都必须继承自别的东西,并且所有事物都应该是可子类化的。
这在MFC和Java
Swing等时代的UI框架中最为典型。在Swing中,您具有可笑的继承性,其中(iirc)按钮扩展了复选框(或相反),从而给其中一个未使用的行为(我认为是对复选框的setDisabled()调用)。他们为什么要共享血统?没什么,除了,他们有一些共同的方法。
这些天组成比继承更受青睐。Java默认情况下允许继承,而.Net采用了(更现代的)默认情况下不允许继承的方法,我认为这是正确的(并且与Josh
Bloch的原理更加一致)。
DI / IoC还为合成提供了条件。
乔什·布洛赫(Josh
Bloch)还指出,继承破坏了封装,并给出了一些很好的解释原因。还已经证明,如果通过委派而不是扩展类,则更改Java集合的行为更加一致。
就我个人而言,这些天来我在很大程度上将继承视为仅是关于继承的细节。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)