http://jinnianshilongnian.iteye.com/blog/1413846

http://jinnianshilongnian.iteye.com/blog/pdf

之后又看了类与类之间关系:

下面这篇文章是来自:

http://jinnianshilongnian.iteye.com/blog/1415277

类与类之间的关系-依赖,关联,聚合,组合,继承泛化的区别

1)依赖
依赖关系是类与类之间的联接。一个类依赖于另一个类的定义。如,一个人(Person)可以买车(Car)和房子(House),Person类依赖于Car和House的定义,因为Person引入了Car和House。与关联不同的是,Person类中没有Car和House的属性,Car和House的实例是以参量的方式传入到buy()方法中的。一般而言,依赖关系在Java语言中体现为局部变量,方法形参,或者对静态方法的调用。

2)关联
关联是类与类之间的联接,使一个类知道另一个类的属性和方法。关联可以是双向,也可以是单向的。一般使用成员变量来实现。

3)聚合
聚合是一种强的关联关系。是整体和个体之间的关系。例如,汽车类与引擎类,轮胎类之间的关系就是整体与个体之间的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系涉及的两个类在同一层次,而聚合关系中两个类处在不平等的层次上,一个代表整体,一个代表部分。

4)组合
组合也是关联关系的一种,一种比聚合关系强的关系。组合关系中的部分类不能独立于整体类存在。整体类和部分类有相同的生命周期。如Person类和Leg类。

5)继承/泛化
泛化和继承其实是一个逆过程 泛化就是有子类抽象出一个父类 而继承就是由父类具体化一个子类 例如足球比联赛跟什么西甲 意甲 英超之间就是泛化/继承的关系

6)组合和聚合的区别
组合和聚合都属于关联,所以它们之间难免有相似之处,区别举例来说明:
程老师的《大话》里举大那个大雁的例子很贴切 在此我就借用一下 大雁喜欢热闹害怕孤独 所以它们一直过着群居的生活 这样就有了雁群 每一只大雁都有自己的雁群 每个雁群都有好多大雁 大雁与雁群的这种关系就可以称之为聚合 另外每只大雁都有两只翅膀 大雁与雁翅的关系就叫做组合 有此可见 聚合的关系明显没有组合紧密 大雁不会因为它们的群主将雁群解散而无法生存 而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期
聚合关系图:

聚合关系图:

雁群类:

public class GooseGroup
{
publi Goose goose;
public GooseGroup(Goose goose){
this.goose=goose;
}
}

大雁类:

public class Goose{
public Wings wings;
public Goose()
{
wings=new Wings();
}
}

从构造函数来看,GooseGroup的构造函数要用到Goose作为参数把值传进来,Goose可以脱离GooseGroup独立存在。
组合关系中整体类含有部分类的实例化,Goose在实例化之前,一定要先实例化Wings,两个类紧密耦合在一起,它们有相同的生命周期,Wings不能独立于Goose存在。

从信息封装来看,聚合关系中,客户端同时了解GooseGroup和Goose,因为它们是独立的。
而在组合关系中,客户端只认识大雁类,根本不知道翅膀类的存在,因为翅膀类被严密封装在大雁类中。

 
分类: 架构

最新文章

  1. WebAPi之SelfHost自创建证书启动Https疑难解惑及无法正确返回结果
  2. Mybatis 总结
  3. Android源码中内置包含so文件的APK文件
  4. 推流和拉流的概念以及RTMP和HLS协议
  5. mysql 数据库基本概念
  6. c# 获取某日期所在周的第一天和最后一天
  7. WebAPI接口调用身份验证
  8. ThinkPHP 3.2.3 关联模型的使用
  9. LRU缓存实现(Java)
  10. hg(Mercurial)版本库迁移到git版本库
  11. 文件控制列表命令setfacl和getfacl的使用
  12. android Base64加密解密
  13. LeetCode --> 771. Jewels and Stones
  14. bug单的生命周期
  15. StarSpace是用于高效学习实体向量的通用神经模型
  16. js的关于for的语句
  17. python之生成器与迭代器
  18. js添加锚点
  19. HDU 2071 Max Num
  20. WCF开发实战系列二:使用IIS发布WCF服务 转

热门文章

  1. IntelliJ IDEA 详细图解最常用的配置 ,适合新人,解决eclipse转idea的烦恼
  2. Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)A模拟 B三分 C dfs D map
  3. 洛谷P4135 作诗 (分块)
  4. 微服务与devops的文章推荐
  5. HDU 5868 Different Circle Permutation Burnside引理+矩阵快速幂+逆元
  6. 「6月雅礼集训 2017 Day7」电报
  7. Spring Session加Redis(山东数漫江湖)
  8. javascript继承机制 & call apply使用说明
  9. sass_安装问题(ERROR: Could not find a valid gem 'sass' (>= 0), here is why: Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: cert)
  10. 解决嵌套GridView显示不全的问题