合成(组合)/聚合复用原则

定义:

  • 尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的;
  • 聚合has-A和组合contains-A;
  • 优点:可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响较少;

 

聚合has-A

聚合关系中代表部分事务的对象与代表聚合事务的对象,生命周期无关,即使删除了聚合对象,也不一定删除了部分对象;

举例:A类中引用了B类的对象,当A类被垃圾回收器回收后,B类的对象(还有其他对象引用)因为还有类引用就不会被回收。

组合contains-A

组合关系中代表部分事务的对象与代表组合事务的对象,生命周期有关,删除了组合对象,也就删除了部分对象;

举例:A类中引用了B类的对象,当A类被垃圾回收器回收后,B类的对象(没有其他对象引用)因为没有类引用也就被回收。

 

继承复用与合成/聚合复用

1. 继承复用

  • 定义

        继承复用通过扩展一个已有对象的实现来得到新的功能,基类明显地捕获共同的属性和方法,而子类通过增加新的属性和方法来扩展父类的实现。继承是类型的复用。

  • 继承复用的优点

        新的实现较为容易,因为超类的大部分功能可通过继承关系自动进入子类

        修改或扩展继承而来的实现较为容易

  • 继承复用的缺点

        继承复用破坏封装,因为继承将细节暴露给子类

        如果父类的实现发生改变,那么子子类的实现也不得不发生改变

        从父类继承而来的实现是静态的,不可能在运行时间内发生改变,因此没有足够的灵活性

2.  合成/聚合复用

  • 定义

        由于合成/聚合可以将已有对象纳入到新对象中,使之成为新对象的一部分,所以新对象可以调用已有对象的功能

  • 优点

        该复用支持封装

        该复用所需的依赖较少

        每个新的任务可将焦点集中在一个任务上

  • 缺点

        通过这种复用建造的系统会有较多的对象需要管理

        为了能将多个不同的对象作为组合块来使用,必须仔细地对接口进行定义
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值