[阅读笔记]面向对象的设计法则--法则1:优先使用(对象)组合,而非(类)继承 Favor Composition Over Inheritance

组合
      组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。
      将功能委托给所组合的一个对象,从而获得新功能。
      实现方式
   根据引用(By reference)
   根据值(By value)
      优点
   容器类仅能通过被包含对象的接口来对其进行访问。
   “黑盒”复用,因为被包含对象的内部细节对外是不可见。
   封装性好。
   实现上的相互依赖性比较小。
   每一个类只专注于一项任务。
   通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合。
      缺点
   从而导致系统中的对象过多。
   为了能将多个不同的对象作为组合块(composition block)来使用,必须仔细地对接口进行定义。
继承
      继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法。
      泛化类(超类)可以显式地捕获那些公共的属性和方法。
      特殊类(子类)则通过附加属性和方法来进行实现的扩展。
      优点
   容易进行新的实现,因为其大多数可继承而来。
   易于修改或扩展那些被复用的实现。
      缺点
   破坏了封装性,因为这会将父类的实现细节暴露给子类。
   “白盒”复用,因为父类的内部细节对于子类而言通常是可见的。
   当父类的实现更改时,子类也不得不会随之更改。
   从父类继承来的实现将不能在运行期间进行改变。
继承/组合总结
      组合与继承都是重要的重用方法。
      在OO开发的早期,继承被过度地使用。
      优先使用组合可以获得重用性与简单性更佳的设计。
      可以通过继承,以扩充(enlarge)可用的组合类集(the set of composable classes)。
      组合与继承可以一起工作。
      基本法则是:优先使用对象组合,而非(类)继承[ Favor Composition Over Inheritance ] 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值