【设计模式】继承和对象组合

面向对象系统中功能复用的两种常用技术是类继承和对象组合。

先说这个类继承,说到了继承,就存在父类的内部细节对子类一定是可见的。这种功能复用又称为白箱复用。
对于一些编译类语言(java/c++)来讲,类继承在编译时刻静态定义的,可以直接使用,因为程序语言直接支持类继承,
优点:类继承可以比较方便地改变被复用的实现(简单来讲,容易编写功能编码,只知道,继承了一些操作和属性)。
缺点:由于继承在编译时刻就定义了,因此无法在运行时刻改变父类继承的实现。除此,还有父类至少定义了部门子类的具体表示。
继承对子类是可见的,所以继承常认为‘破坏了封装性’。 子类中的实现与它的父类有如此紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化.
依赖: 假设你需要复用子类时,实现上的依赖性就会产生一些问题。如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。解决方法其实可以只去继承抽象类,因为抽象类通常提供较少的实现。

来说这个对象组合,对象组合是通过获得对其他对象的引用而在运行时刻动态定义的。
优点: 对象的实现是基于接口写的,所以实现上存在较少的依赖关系, 有助于保持每个类被封装。
理想情况下,你不应为获得复用而创建新的构件,你应该能够只使用对象组合技术通过封装已有的构件就获得你需要的功能。

经验表明:设计者往往过度使用了继承这种复用技术。但依赖于对象组合技术的设计却有更好的复用性。你应该会注意到在设计模式中一再使用对象组合技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值