复合优先于继承,继承是实现代码重用的有力手段,并不是所有情况都适用,使用不当会导致软件变得很脆弱。与方法调用不同的是,继承打破了封装性。

总而言之,组合和继承,都能实现对类的扩展。但是要分具体情况用哪个实现,是Has-a,还是Is-a的关系。

两者区别如下表所示:

组合  继承
has-a关系 is-a关系
运行期决定 编译期决定
不破坏封装,整体和局部松耦合 破坏封装,子类依赖父类
支持扩展,随意增加组合类 只能继承一个父类,必须包含所有方法,增加系统复杂性
动态选择组合类方法 复用父类方法

来自 :http://blog.csdn.net/wangpeifeng669/article/details/26403119

Decorator模式对组合的应用是最经典诠释:

上码


public Ice(Product product) {  this.product = product;
}  public double money() {  return product.money() + 1.5;
}
}  //加奶:
class Milk implements Product {
private Product product;  public Milk(Product product) {  this.product = product;
}  public double money() {  return product.money() + 4.0;
}
}  //加巧克力:
class Chocolate implements Product {
private Product product;  public Chocolate(Product product) {  this.product = product;
}  public double money() {  return product.money() + 5.5;
}
}
public class DecoratorModel{
public static void main(String [] args){  Product coffee = new Coffee();  Product sugarCoffee = new Sugar(coffee);  Product sugarmilkCoffee = new Milk(sugarCoffee);  System.out.println("加糖咖啡:"+sugarCoffee.money());  System.out.println("加糖加奶咖啡:"+sugarmilkCoffee.money());
}
}  

来自http://www.cnblogs.com/shipengzhi/articles/2086419.html

  

Chapter 02:复合 VS 继承相关推荐

  1. SSH Chapter 02 Oracle数据库应用

    SSH Chapter 02 Oracle数据库应用 笔记 本章目标 : 会创建表空间 会创建用户并授权 掌握序列的使用方法 理解同义词的使用方法 了解索引,会创建常用索引 了解分区表 ​ 1. 表空 ...

  2. PRML - Chapter 02 Probability Distributions

    PRML - Chapter 02 Probability Distributions 提纲 重点 密度估计 充分统计量 高斯分布 ( 建议充分熟悉 ) 难点 贝叶斯估计 多元高斯分布 指数族分布 共 ...

  3. 2022年5月22日【Jiawei_Z】C# 基础教程---刘铁锰 02 委托 事件 继承

    C# 基础教程-刘铁锰 02 委托 事件 继承 多态 重写. 类–什么是类? P25 23节 - 是一种数据结构 - 是一种数据类型 - 代表世界中的"种类" namespace ...

  4. ATF(Arm Trusted Firmware)/TF-A Chapter 02 BL1-ROMCode

    第二章目录: Chapter 02.TF-A(Arm Trusted Firmware, ATF ) BL1-ROMCode(本文) Chapter 02.TF-A(Arm Trusted Firmw ...

  5. 大家一起学面向对象设计模式系列Chapter 02 软件设计的基本原则

    我们为什么要使用设计模式呢?有人可能会说为了设计出"高内聚低耦合"的软件."高内聚低耦合"的软件实际上也就是本文所说的具有可维护性和可复用性的软件. 这篇文章主 ...

  6. 宏病毒的研究与实例分析02——复合文档格式分析

    文章目录 复合文档二进制解析 复合文档数据结构解析 准备工作 基础知识 Header FAT Directory 补充 宏代码数据结构解析 说明 目前主流杀软在处理宏病毒时,都是直接删除含有宏病毒的文 ...

  7. 《隐形说服力》Chapter 02 流畅技术

    在这里,流畅技术实际上指的是给对方的"阅读体验".在信息爆炸的时代,怎么才能抓住目标用户的特点?Chapter 01 承认拒绝技术营造了一种自由的氛围来降低顾客的警惕,这里则是营造 ...

  8. [bbk2907]第3集 - Chapter 02 - RAC的安装过程中需要注意的要点

    阿斯顿飞 转载于:https://www.cnblogs.com/arcer/archive/2013/06/14/3135335.html

  9. C++ Primer Plus Chapter 4 --复合类型(笔记)

    1. char类型 char类型是专为存储字符而设计的,通过使用字母的数值编码解决储存问题.最常见的符号集是ASCII字符集,字符集中的字符用数值编码表示(ASCII码),例如:A的编码是65,M的编 ...

最新文章

  1. 计算机网络Rip例题,计算机网络技术习题
  2. LeetCode实战:存在重复元素
  3. 输入法图标(语言栏)不见了怎么办
  4. Idea开发Java web项目目录结构
  5. 一步搞定模型训练和商品召回:京东全新索引联合训练召回模型
  6. 依赖版本控制-pom文件介绍
  7. 工作259:uni--页面--验证码添加
  8. 华为h22h05服务器做raid_华为V5服务器 RAID控制卡(LSI SAS3008IR)
  9. petshop4.0 详解之一(系统架构设计)(转载)
  10. Oracle 9i DBA Fundamentals I学习笔记(六)
  11. 一个项目三个坑,我懵了
  12. Django 踩过的坑(二)
  13. LVM基本介绍与常用命令
  14. 【论文阅读】Deep Modular Co-Attention Networks for Visual Question Answering
  15. unittest 测试
  16. paip.图片搜索工具总结
  17. 【颜色识别】基于matlab GUI机器视觉RGB识别系统【含Matlab源码 951期】
  18. python字典输出键值对_Python:遍历字典 键值对
  19. APP安全测试点概述
  20. Excel 2013 基础视频教程上线了

热门文章

  1. 中了logo1.exe
  2. 5-django——验证码,中间件
  3. 具体分析Struts工作流程
  4. Oracle 10g(10.2.0.4)升级到10.2.0.5.19
  5. Resharper的使用
  6. jmx使用应该注意的基本规范
  7. 编译安装keepalived-1.2.2.tar.gz报错处理
  8. 根据status信息对MySQL服务器进行优化-1
  9. JNI开发篇——报错:Flag android.useDeprecatedNdk is no longer supported and will be removed in the next……...
  10. 阿里云EMR异步构建云HBase二级索引