简单说设计模式001-类关系

在实际开发中,针对研发的各个岗位,设计模式都是很重要的,降低耦合、可复用性、可扩展性、可维护性等等,早已是众所周知的特征。
工作越久对设计模式的期待也就越大,也就成为我必须认真对待的原因,重新认识一遍设计模式

一、面向对象类关系

就Java而言,常用来描述类关系的包含多种,其中is-a、has-a和like-a是非常普及的,面向对象的设计关系主要体现的类关系上,依靠接口、抽象类、类以及变量来描绘。

is-a
  1. is-a描述的是继承/泛化关系,类A is a 类B,表示A完全继承了B的属性及行为,即B是A的父类。A继承于B,B是A的泛化。
  2. 举例:笔记本、台式机、工作站都属于计算机,老板、员工、学生、老师都属于人。
    在这里插入图片描述
has-a
  1. has-a描述的是从属关系,类A has a 类B,表示B是A的一种属性或行为,从而说明B属于A,或者说B是A的组成部分。
  2. 举例:操作系统是计算机的一部分,无论是winodw或Linux;大脑是人体的一部分。
  3. has-a是整体和部分的结合,从这方面说整体和部分的依赖,也可以分为强依赖、弱依赖等。
    在这里插入图片描述
like-a
  1. like-a描述的是组合关系,类A like 类B,表示A拥有B的属性及行为的同时还具备其他能力,比如手机具有相机的功能,但同时具备通讯功能。
  2. 从语言上来说,A是多种接口的共同体,即A实现了多个接口。
  3. 举例:手机具备通讯、计算机、拍照、摄像等能力。
    在这里插入图片描述
use-a
  1. use-a通常被描述为依赖关系,类A use-a 类B,表示A需要使用到B的某种或多种属性或行为,即A依赖了B对象,但这种依赖是一种比较弱的关系。
  2. 从语言上说类A的一个属性引用了类B
  3. 举例:程序员需要使用计算机编程;司机需要驾驶卡车运货。
    在这里插入图片描述
二、UML类图关系

在实际绘制类图的过程中,类与类的关系是重点。类的关系有继承关系(Inheritance)、实现关系(Realization)、依赖关系(Dependency)和关联关系(Association),其中关联关系又可以扩展出聚合关系(Aggregation)、组合关系(Composition)。
泛化关系(Generalization)实际只是继承关系的相反的描述。

继承(Inheritance)
  • 一个类A继承另外一个类B,类A为子类,类B为父类或基类,类A完全拥有类B的属性及行为,又特化了类B的所有属性、行为。
  • 在Java语言中,extends关键字标识了继承关系。
实现(Realization)
  • 一个类A实现一个(或多个)接口的功能。
  • 在Java语言中,implements关键字标识了实现关系。
    在这里插入图片描述
依赖(Dependency)
  • 一个类A依赖另外一个类B,即类A在行为上需要使用到类B来实现自己的功能,需要依赖关系是一种弱关系,但类B的改变会影响到类A。
  • 在Java语言中,依赖表现为类A的方法中使用到类B,类B是作为形参出现。
关联(Association)
  • 关联关系是一种强依赖,一个类A关联了另一个类B,即类B作为属性被引用到类A中。关联可以是单向也可以是双向的,即B可以引用A也可以被A引用。
  • 关联关系又分为一般关联、聚合关联和组合关联。
  • 在Java语言中,关联通常使用类的属性表达,即类B作为类A的属性形式。
    在这里插入图片描述
聚合(Aggregation)
  • 聚合关系是关联关系的一种特例,充分体现了整体和部分的关系,即has-a的关系。聚合关系中的整体和部分是可以分离的,具备一定的独立性和各自的生命周期。
  • 既然聚合是关联的一种特例,从现实中举例说明,类似公司和员工的关系。
    在这里插入图片描述
组合(Composition)
  • 组合关系是一种更强的聚合,或者说是包含,即contains-a的关系。
  • 在组合关系中,部分不能脱离整体而独立存在,例如动物与大脑的关系,公司与部门的关系。
    在这里插入图片描述
三、UML类图元素

在大多数绘制UML类图的工具中,都提供好了绘制的形状,简述一下关系线的表现形式。

  • 继承
    在这里插入图片描述

  • 实现
    在这里插入图片描述

  • 依赖
    在这里插入图片描述

  • 关联
    在这里插入图片描述
    在这里插入图片描述

  • 聚合
    在这里插入图片描述

  • 组合
    在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值