Chapter 02:复合 VS 继承
复合优先于继承,继承是实现代码重用的有力手段,并不是所有情况都适用,使用不当会导致软件变得很脆弱。与方法调用不同的是,继承打破了封装性。
总而言之,组合和继承,都能实现对类的扩展。但是要分具体情况用哪个实现,是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 继承相关推荐
- SSH Chapter 02 Oracle数据库应用
SSH Chapter 02 Oracle数据库应用 笔记 本章目标 : 会创建表空间 会创建用户并授权 掌握序列的使用方法 理解同义词的使用方法 了解索引,会创建常用索引 了解分区表 1. 表空 ...
- PRML - Chapter 02 Probability Distributions
PRML - Chapter 02 Probability Distributions 提纲 重点 密度估计 充分统计量 高斯分布 ( 建议充分熟悉 ) 难点 贝叶斯估计 多元高斯分布 指数族分布 共 ...
- 2022年5月22日【Jiawei_Z】C# 基础教程---刘铁锰 02 委托 事件 继承
C# 基础教程-刘铁锰 02 委托 事件 继承 多态 重写. 类–什么是类? P25 23节 - 是一种数据结构 - 是一种数据类型 - 代表世界中的"种类" namespace ...
- 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 ...
- 大家一起学面向对象设计模式系列Chapter 02 软件设计的基本原则
我们为什么要使用设计模式呢?有人可能会说为了设计出"高内聚低耦合"的软件."高内聚低耦合"的软件实际上也就是本文所说的具有可维护性和可复用性的软件. 这篇文章主 ...
- 宏病毒的研究与实例分析02——复合文档格式分析
文章目录 复合文档二进制解析 复合文档数据结构解析 准备工作 基础知识 Header FAT Directory 补充 宏代码数据结构解析 说明 目前主流杀软在处理宏病毒时,都是直接删除含有宏病毒的文 ...
- 《隐形说服力》Chapter 02 流畅技术
在这里,流畅技术实际上指的是给对方的"阅读体验".在信息爆炸的时代,怎么才能抓住目标用户的特点?Chapter 01 承认拒绝技术营造了一种自由的氛围来降低顾客的警惕,这里则是营造 ...
- [bbk2907]第3集 - Chapter 02 - RAC的安装过程中需要注意的要点
阿斯顿飞 转载于:https://www.cnblogs.com/arcer/archive/2013/06/14/3135335.html
- C++ Primer Plus Chapter 4 --复合类型(笔记)
1. char类型 char类型是专为存储字符而设计的,通过使用字母的数值编码解决储存问题.最常见的符号集是ASCII字符集,字符集中的字符用数值编码表示(ASCII码),例如:A的编码是65,M的编 ...
最新文章
- 计算机网络Rip例题,计算机网络技术习题
- LeetCode实战:存在重复元素
- 输入法图标(语言栏)不见了怎么办
- Idea开发Java web项目目录结构
- 一步搞定模型训练和商品召回:京东全新索引联合训练召回模型
- 依赖版本控制-pom文件介绍
- 工作259:uni--页面--验证码添加
- 华为h22h05服务器做raid_华为V5服务器 RAID控制卡(LSI SAS3008IR)
- petshop4.0 详解之一(系统架构设计)(转载)
- Oracle 9i DBA Fundamentals I学习笔记(六)
- 一个项目三个坑,我懵了
- Django 踩过的坑(二)
- LVM基本介绍与常用命令
- 【论文阅读】Deep Modular Co-Attention Networks for Visual Question Answering
- unittest 测试
- paip.图片搜索工具总结
- 【颜色识别】基于matlab GUI机器视觉RGB识别系统【含Matlab源码 951期】
- python字典输出键值对_Python:遍历字典 键值对
- APP安全测试点概述
- Excel 2013 基础视频教程上线了
热门文章
- 中了logo1.exe
- 5-django——验证码,中间件
- 具体分析Struts工作流程
- Oracle 10g(10.2.0.4)升级到10.2.0.5.19
- Resharper的使用
- jmx使用应该注意的基本规范
- 编译安装keepalived-1.2.2.tar.gz报错处理
- 根据status信息对MySQL服务器进行优化-1
- JNI开发篇——报错:Flag android.useDeprecatedNdk is no longer supported and will be removed in the next……...
- 阿里云EMR异步构建云HBase二级索引