一些面向对象的设计法则-法则1:优先使用(对象)组合,而非(类)继承

本文探讨了面向对象设计中优先使用对象组合而非类继承的原则。组合通过对象间的协作实现功能扩展,保持封装性,提高灵活性。而继承虽然便于复用和扩展,但可能破坏封装,增加耦合。Coad规则提出继承适用性的条件。文章通过多个示例说明何时选择组合或继承。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

法则1:优先使用(对象)组合,而非(类)继承

[ Favor Composition Over Inheritance ]

组合

n         (对象)组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。

n         将功能委托给所组合的一个对象,从而获得新功能。

n         有些时候也称之为“聚合”(aggregation)或“包容”(containment),尽管有些作者对这些术语赋予了专门的含义

n         例如:

F        聚合:一个对象拥有另一个对象或对另一个对象负责(即一个对象包含另一个对象或是另一个对象的一部分),并且聚合对象和其所有者具有相同的生命周期。(译者注:即所谓的“同生共死”关系,可参见GOFDesign Patterns: Elements of Reusable Object-Oriented Software的引言部分。)

F        包容:一种特殊类型的组合,对于其它对象而言,容器中的被包含对象是不可见的,其它对象仅能通过容器对象来访问被包含对象。(Coad

 

n         包含可以通过以下两种方式实现:

F        根据引用(By reference

F        根据值(By value

n         C++允许根据值或引用来实现包含。

n         但是在Java中,一切皆为对象的引用!

组合的优点和缺点

n         优点:

F        容器类仅能通过被包含对象的接口来对其进行访问。

F        “黑盒”复用,因为被包含对象的内部细节对外是不可见。

F        对装性好。

F        实现上的相互依赖性比较小。(译者注:被包含对象与容器对象之间的依赖关系比较少)

F        每一个类只专注于一项任务。

F

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值