在V2EX上看到了这个贴子,下面的回复里有一句话很好,想记录下来。

先理解设计,再理解流程,再看文件结构,最后看代码。

还有下面的回复。

组合优于继承。

进而搜索了一下【组合与继承】,在知乎上找到了一个问题:在开发中 为什么要多用组合少用继承 ?组合指的又是什么? 摘抄一个回答如下

能问这种问题的,肯定是初学者吧?或者你面试别人的时候也会问道。
像程序开发基本原则这类问题,一定不要死扣字眼。
这里的多用、少用,其实是指,你要弄清楚在目前的模式下需要哪种。
这里的多用,是指大多数时候,但不是所有时候。
而少用,是偶尔会用到。

所以问题来了,到底什么时候用呢?

个人觉得这种原则你记住就可以了。在之后的开发过程中可以慢慢体会。而且平时学习一个特性的
时候,要弄清楚为嘛要有这个特性,有什么好处。

其实在《Thinking in java》里有提到,当你用继承的时候,肯定是需要利用多态的特性。
如果用不到多态的特性,继承的关系是无用的。
比如你要写一个画图系统,画不同的图形,这个时候,你可能考虑到调用相应的函数的时候可以不
考虑具体类型,直接画就好了,具体什么图形,交给运行时去判断。这个时候,就要用到多态,就
需要有继承关系。一个父类,多个子类。然后用父类的类型去引用具体子类的对象,就可以了。

而用不到多态的时候,你的继承有什么用呢?代码复用?
一个继承可以让你少写很多代码,但是用错了场合,后期的维护可能是灾难性的。因为继承关系的
耦合度很高,一处改会导致处处需要修改。这个时候就需要组合。

组合到底是啥?组合是一种“has-a”的关系。简单的说,就是一个类里面有另一个类的一个引
用,就是组合关系了。这个时候可以说“class-A has a class-B”。
组合的耦合度相对小很多,只要类里的接口不变,一版不会出现继承里的一处改处处改的问题。毕
竟,你是通过另一个类的引用调用其中的一些方法(函数)而已。

其实,更多的时候是混用。。。
推荐题主去看《head first 设计模式》就可以了。
最后,不编程,只谈原则都是装b啊,多些写代码,等有经验再回头看这些问题就知道了。

来源:https://www.zhihu.com/question/49008835/answer/113876529

标签: none

评论已关闭