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

一、什么是继承

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

优点

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

缺点

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

二、什么是组合

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

优点

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

缺点

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

三、总结

  1. 面向对象程序的设计原则是:组合优于继承,多用组合少用继承。
  2. 但在实际的开发过程中,需要根据具体情况来选择继承还是组合:当类间的关系层次较浅(不多于3层),类间的联系也比较稳定,建议采用继承的模式,否则采用组合的模式更好。 本文由博客一文多发平台 OpenWrite 发布!
相关推荐
鱼跃鹰飞5 小时前
设计模式系列:工厂模式
java·设计模式·系统架构
老蒋每日coding12 小时前
AI Agent 设计模式系列(十九)—— 评估和监控模式
人工智能·设计模式
会员果汁13 小时前
23.设计模式-解释器模式
设计模式·解释器模式
「QT(C++)开发工程师」20 小时前
C++设计模式
开发语言·c++·设计模式
茶本无香20 小时前
设计模式之七—装饰模式(Decorator Pattern)
java·设计模式·装饰器模式
漂洋过海的鱼儿1 天前
设计模式——EIT构型(三)
java·网络·设计模式
老蒋每日coding2 天前
AI Agent 设计模式系列(十八)—— 安全模式
人工智能·安全·设计模式
老蒋每日coding2 天前
AI Agent 设计模式系列(十六)—— 资源感知优化设计模式
人工智能·设计模式·langchain
老蒋每日coding2 天前
AI Agent 设计模式系列(十七)—— 推理设计模式
人工智能·设计模式
冷崖2 天前
桥模式-结构型
c++·设计模式