静海集团网站建设,东莞 网站建设 保健品,网址导航源码,品牌开发者选择建议文章目录 什么情况下不推荐使用继承#xff1f;组合相比继承有哪些优势#xff1f;使用组合、继承的时机 本文主要想了解#xff1a; 为什么组合优于继承#xff0c;多用组合少用继承。如何使用组合来替代继承哪些情况适用继承、组合。有哪些设计模式使用到了继承、组合。 … 文章目录 什么情况下不推荐使用继承组合相比继承有哪些优势使用组合、继承的时机 本文主要想了解 为什么组合优于继承多用组合少用继承。如何使用组合来替代继承哪些情况适用继承、组合。有哪些设计模式使用到了继承、组合。 什么情况下不推荐使用继承
继承是面向对象的四大特性之一用来表示类之间的 is-a 关系可以解决代码复用的问题。
但当继承层次过深、过复杂也会影响到代码的可维护性。在这种情况下我们应该尽量少用甚至不用继承。 组合相比继承有哪些优势
可以利用组合composition、接口、委托delegation三个技术手段一块儿来解决刚刚继承存在的问题继承层次过深、继承关系过于复杂会影响到代码的可读性和可维护性。
如下例子 接口实现功能的拓展接口表示具有某种行为特性。接口可以拓展类的行为。通过组合和委托技术来消除代码重复。 替代复杂的继承关系逻辑
我们知道继承主要有三个作用表示 is-a 关系支持多态特性代码复用。而这三个作用都可以通过其他技术手段来达成。 比如 is-a 关系我们可以通过组合和接口的 has-a 关系来替代多态特性我们可以利用接口来实现代码复用我们可以通过组合和委托来实现。 所以从理论上讲通过组合、接口、委托三个技术手段我们完全可以替换掉继承在项目中不用或者少用继承关系特别是一些复杂的继承关系。 使用组合、继承的时机
总体原则 如果类之间的继承结构稳定不会轻易改变继承层次比较浅比如最多有两层继承关系继承关系不复杂我们就可以大胆地使用继承。 反之系统越不稳定继承层次很深继承关系复杂我们就尽量使用组合来替代继承。 相关设计模式 有一些设计模式会固定使用继承或者组合。 我们必须使用继承的场景
如果你不能改变一个函数的入参类型而入参又非接口为了支持多态只能采用继承来实现。
如下 其中 FeignClient 是一个外部类我们没有权限去修改这部分代码但是我们 希望执行encode时按照司内逻辑来进行encode。 这个时候我们只能采用继承来实现了。 参考《设计模式之美》王争