软件构造 继承和委派

本文探讨了继承与委派两种代码复用策略。继承主要发生在类层次,允许子类继承父类的方法并扩展功能,而委派则是在对象层面,通过一个对象调用另一个对象的方法实现功能。文中列举了依赖、关联、组合和聚集四种委派类型,并分析了它们的特性。组合和聚集是对象间的两种强关系,其中组合中对象的生命周期与其包含的对象绑定,而聚集则允许对象独立存在。理解这些概念有助于优化代码设计和提高软件的可维护性。
摘要由CSDN通过智能技术生成

委派和继承都是为了提高代码的复用性,但方式不同。

继承发生在class层面,委派发生在object层面,是对对象的操作。

继承中,子类拥有父类所有的方法,而且还可以继续增加父类中没有的方法。

如public class B extends A,B中可以新增方法,同时继承了父类A中的方法。子类只能继承一个父类,但是可以多层扩展(该子类的父类继承其父类)。

委派是针对对象的操作。一个对象需要另一个对象的功能,于是捕获该对象,送到另一对象中调用其功能。

当我们需要切菜时,显然切这个方法写给蔬菜并不合适,因此我们交给刀来切,相当于我们把蔬菜这个对象给刀进行了处理,这就是委派。

委派常见的种类:

1.Dependency(依赖):短期的delegation

在这种关系中,一个类使用另一个类而不将其作为一个属性。它可以是一个参数,或者在一个方法中本地使用。

2.Association(关联): 永久性的delegation
关联是类之间的持久关系,允许一个对象实例让另一个对象实例代表它自己做其他事。指定了一种对象与另一种对象相连接,并且不代表行为,即不在该类的方法中使用另一个类的方法,只是简单的将不同的对象连接起来。

示例:

Composition: 更强的delegation
组合是将简单对象或数据类型组合成更复杂的方法的一种方法。

直接在该类中实例化一个其他类,然后就可以随意操作,自由度很高。

不过这里的实例是private的,也就是说,外界访问不到,这样的话,更改其值只能在该方法中;而且每次创建该类的对象时,就已经创建好这个类中的实例;也就是说一旦创建好该类的对象,其中的属性指向便已经创建好。

Aggregation
聚集:对象存在于另一个之外,是在外部创建的,所以它作为一个参数传递给构造函数。

可以看到,在这里,内部的属性是可以在外部指定的,而不是完全依赖该类。

组合和聚集对比:

在组合中,当拥有的对象被销毁时,所包含的对象也是如此。
比如:
一所大学拥有不同的部门,每个部门都有许多教授,因为是大学创建了这些部门,所以如果大学关闭,这些部门将不复存在,但这些部门的教授将继续存在。

但是在聚集中,这并不一定是正确的:
大学可以被看作是部门的组成,而院系则是教授的集合。一个教授可以在一个以上的部门工作,但是一个部门不能成为一所大学的一部分,部门是在大学外创建的,故大学倒闭,部门还在。
 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值