设计模式中继承和组合的总结

一、什么是继承

继承就是子类继承父类的特征和行为,使得子类具有和父类一样的属性和方法,在Java中通过extends关键字来实现继承。

优点

  1. **继承最大的好处是可以代码复用。**针对多个类有相同的属性和方法,可以将这些相同代码抽取出来形成统一父类,后续只需要继承该父类就能使用这些属性和方法,可以避免代码冗余,实现代码复用。
  2. **继承能实现多态特性。**继承父类的方法,子类可以根据自己的需求重写父类方法,这是Java的多态带来的便利。
  3. 继承模式表明的是is-a关系,表明子类是父类的一种类型,可以用来约束父类和子类的关系。

缺点

  1. **类间的层次变深会影响代码的可读性和可维护性。**当类间的层次达到3层或3层以上时,需要确定自身类的属性和方法就会比较麻烦。
  2. 子类会继承了父类的所有属性和方法,即使没有使用也会继承,容易造成自身属性的膨胀。

二、什么是组合

组合是对现有对象进行拼装组合实现更复杂的功能,在Java中通过引用其他的类做自身的属性实现类间的组合。

优点

  1. 组合模式表明的是has-a的关系,表明自身这个类包含其他类的关系。
  2. 继承的特性可以通过组合、接口、委托三个技术手段来达成。除此之外,利用组合还能解决层次过深、过复杂的继承关系影响代码可维护性的问题。
  3. 组合的层级关系更少,类间的耦合性更低,便于代码维护和阅读。

缺点

  1. 将继承改为组合,意味着需要进行更细粒度的拆分,势必会产生更多的类和接口,类的数量增加会增加代码维护成本。

三、总结

  1. 面向对象程序的设计原则是:组合优于继承,多用组合少用继承。
  2. 但在实际的开发过程中,需要根据具体情况来选择继承还是组合:当类间的关系层次较浅(不多于3层),类间的联系也比较稳定,建议采用继承的模式,否则采用组合的模式更好。 本文由博客一文多发平台 OpenWrite 发布!
相关推荐
沫璃染墨5 小时前
《Linux工程实践篇(一):认识设计模式——从日志系统看策略模式》
linux·c++·安全·设计模式·策略模式
十六宿舍7 小时前
【软件设计模式-第一课:基础知识了解】
设计模式·架构·面向对象·软件架构
geovindu10 小时前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式
怕浪猫13 小时前
面试官让我手写一个 Tool Use,我用了 3 种方案
设计模式·面试·程序员
geovindu1 天前
rust: Abstract Factory pattern
开发语言·后端·设计模式·rust·抽象工厂模式
Carl_奕然2 天前
【智能体】Loop 的四种设计模式之:Event-Driven Loop(2026 最新版)
人工智能·驱动开发·python·设计模式
Carl_奕然2 天前
【智能体】Loop 的四种设计模式之:Hill Climbing Loop(2026 最新版)
人工智能·python·设计模式
晚安code2 天前
设计模式入门:吃透 SOLID 原则与迪米特法则,再学 5 个高频模式
后端·设计模式
染指11102 天前
135.Agent-多Agent框架-LangChain多智能体(SubAgents子代理)
数据库·人工智能·设计模式·langchain·agent·agents
路弥行至3 天前
【Head First 设计模式】第 2 章:观察者模式 —— 用现代 C++ 重新解读“交互对象的松耦合
c++·经验分享·笔记·观察者模式·设计模式·入门教程·headfirst