首页 > 其他分享 >合成复用原则

合成复用原则

时间:2023-07-07 17:33:02浏览次数:36  
标签:聚合 原则 继承 子类 合成 复用 一个 超类 使用

尽量使用合成/聚合的方式,而不是使用继承。只有当以下的条件全部被满足时,才应当使用继承关系,

1、子类是超类的一个特殊种类,而不是超类的一个角色,也就是区分“Has-A”和“Is-A”。只有“Is-A”关系才符合继承关系,“Has-A”关系应当使用聚合来描述。

2、永远不会出现需要将子类换成另外一个类的子类的情况。如果不能肯定将来是否会变成另外一个子类的话,就不要使用继承。

3、子类具有扩展超类的责任,而不是具有置换掉或注销掉超类的责任。如果一个子类需要大量大置换掉超类的行为,那么这个类就不应该是这个超类的子类。

错误地使用继承而不是合成/聚合的一个常见原因是错误地把“Has-A”当成了“Is-A”。“Is-A”代表一个类是另外一个类的一种,而“Has-A”代表一个类是另外一个类的角色,而不是另外一个类的特殊种类。

标签:聚合,原则,继承,子类,合成,复用,一个,超类,使用
From: https://blog.51cto.com/u_11315052/6654844

相关文章

  • 里氏替换原则
    里氏替换原则,面相对象设计的基本原则之一。里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP是继承服用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏替换原则是对“开-闭”原则的补......
  • 设计模式之类之间的关系和六大原则
    1类之间的关系类与类之间的关系大概有6种,要看懂UML图,首先需要了解这几种关系。1.1继承关系继承指的是一个类(称为子类,子接口)继承另外的一个类(成为父类,父接口)的功能,并可以增加它自己的新功能的能力。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或......
  • 62.对象复用的了解,零拷贝的了解
    62.对象复用的了解,零拷贝的了解1.对象复用对象复用是指将已经创建的对象进行重复使用,而不是创建新的对象。在面向对象编程中,对象复用可以通过以下几种方式实现:1.对象池:对象池是一种常见的对象复用方式,它可以将已经创建的对象保存起来,并在需要时将其重新使用。2.模板类和模板对......
  • 【大厂面试题】说下 IO 多路复用?
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家✌......
  • 182_Power BI 使用 DAX 按照先进先出原则计算毛利润
    182_PowerBI使用DAX按照先进先出原则计算毛利润一、背景在笔者以往的文章中也有先进先出的案例,可以参考(https://jiaopengzi.com/?s=先进先出)。今天我们来看一个网友提出的问题,先进先出的原则,入库和出库的价格都是不统一的。按照出库的日期来计算先进先出的sku的毛利(......
  • Silhouette 2023.0.1 CE 影视后期ROTO跟踪抠像合成软件 支持AE/PR/达芬奇/VEGAS/OFX插
    Silhouette是一款被广泛应用于影视剧中Roto、抠像、擦威亚的特效合成辅助软件,正所谓术业有专攻,它就是为了应对这些脏活累活而诞生的。之前还有一款软件CommotionPro,但是已经停止开发,目前已经被这款Silhouette所替代,目前它也属于BorisFX家族的一员。软件下载Silhouette2023.......
  • 与 TDengine 性能直接相关——3.0 的落盘机制优化及使用原则
    许多用户会有一个疑问,“落盘”俩字听起来就很底层,似乎无法和手头的性能问题联系到一起,本篇文章的目的就是让大家对它们俩建立起直观的认识。写到数据库的数据总要保存起来——所以时序数据库(TimeSeriesDatabase)TDengine中经常提到的“落盘”,其实指的是内存中的数据持久化到存......
  • IO多路复用
    IO多路复用IO多路复用即用一个线程监视多个文件句柄,句柄没有就绪时会阻塞应用程序,从而释放CPU资源,否则当句柄就绪,能通知到对应程序进行读写操作IO:在操作系统中,数据在内核态和用户态之间的读写操作(大部分情况下指网络IO多路:一般指多个TCP连接复用:一个或多个线程资源......
  • happens-before 原则
    happens-before简述从JDK5开始,Java使用新的JSR-133内存模型。JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。这里提到的两个操作既可以是在一......
  • socket网络编程(三)——select多路复用问题
    1、select诞生的原因在上文我们提到了多客户端的时候,多台客户端发送数据到服务端的话,只能有一台客户端可以正常发送和接受数据,另外一台完全没有反应,那这个问题怎么解决呢?很多人可能第一反应想到利用多线程技术,线程多的话用线程池来维护。的确,多线程确实可以实现这个效果,但是,可能很......