继承与组合
来源:互联网 发布:js 窗口大小 编辑:程序博客网 时间:2024/04/26 21:45
1) 继承通过类继承重用父类代码,指定类Derived 继承自类Base,则一般情况下,类Derived不需要提供任何其它代码就可以当作类Base来使用。在代码重用的开始时期,使用继承更加方便
2) 组合通过在类A对象中增持B类对象(更一般情况下,使用B类对象的指针)、并在A对象中调用B类对象的方式来实现代码的重用。在代码重用的开始时期,使用组合更加麻烦,因为想要A表现出类似B的行为,必须在A中提供所有具有相似的B类的公有方法,并且在方法中传递给B类对象实现
3) 但是,继承时确定的类Derived和类Base之间的关系在编译时确定,无法在运行时修改。因此,无法在运行时修改Derived类的行为,缺少灵活性
4) 而由类A和类B确定的松耦合关系,特别是当A中包含B的指针时,可以通过运行时切换B指针,使其指向不同的B的派生类,从而改变类A的行为,增加灵活性
5) 继承具有适配接口的功能,即如果一个接口需要参数类型为Base,则可以传递Derived,而组合实现的类A,就算实现了B类所有的接口方法,也无法传递到需要B类接口的方法,反之亦然。因此,继承和组合可以合作。
6) 继承与组合合作的典型是Decorator设计模式(装饰者)。这种模式中,装饰者类A中包含被装饰者类B,通过对已有B类方法的调用进行包装、从而实现功能的扩充。由于A继承自B,从而在需要类B的地方,可以无缝地放入A。同时,由于A中持有B类的指针,因此,A中可以放置的实际对象不受限制,不只包括添加类A之前已经有的以B为基类的类对象,也包括所有尚未添加的其它装饰者类对象。在继承和组合的合作下,一方面,添加类A不需要修改现有的代码、且类A可融入已有程序,另一方面,添加类A后,允许更多个类A2、A3的添加和进一步扩展,最终实现了“开放-关闭”原则。
- 论组合与继承
- 组合与继承
- 继承与组合
- 组合与继承
- 组合与继承
- 继承与组合
- 组合 继承 与 代理
- 组合与继承
- 组合与继承
- 继承与组合
- 继承(Virtual)与组合
- 继承与组合
- acm-继承与组合
- oj继承与组合
- ACM--继承与组合
- 14.5继承与组合
- oj继承与组合
- 继承与组合
- 数独求解
- 集合和泛型12-----泛型代码中的默认关键字
- 一个大专生学软件的前途在哪儿??
- 集合和泛型13-----运行库中的泛型
- 关于Struts中Validate验证框架的问题: Document is invalid: no grammar found.
- 继承与组合
- 想要 JInternalFrame 最大化后恢复原来大小时执行一个操作
- 基于面向对象编程的文档向量相似度匹配算法
- 优秀程序员的十个习惯
- Swing的整体设计及MVC体系结构
- 开始之前
- 为您的应用程序加上注册的限制
- 资产负债共同类
- 微软虚拟化技术比较优势