Java类之间的关系图_动力节点Java学院整理

 更新时间:2017年08月08日 10:44:54   作者:zhengzhb  
在Java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强,有兴趣的可以了解一下

Java类之间的关系图

在Java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。

1. 依赖(Dependence) 

依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦涩难懂,但在java中的表现还是比较直观的:类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。类上面的图例中:People类依赖于Book类和Food类,Book类和Food类是作为类中方法的参数形式出现在People类中的。

代码样例:

public class People{ 
  //Book作为read方法的形参 
   public void read(Book book){ 
    System.out.println(“读的书是”+book.getName()); 
  } 
} 

2.关联(Association)

单向关联:

 

双向关联:

对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。关联关系分为单向关联和双向关联。在java中,单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。

代码样例:

public class Son{ 
  //关联关系中作为成员变量的类一般会在类中赋值 
  Father father = new Father(); 
  public void getGift(){ 
    System.out.println(“从”+father.getName()+”获得礼物”); 
  } 
} 
 
public class Father{ 
  Son son = new Son(); 
  public void giveGift(){ 
    System.out.println(“送给”+son.getName()+“礼物”); 
  } 
} 

3.聚合(Aggregation)

聚合关系是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。

代码样例:

public class People{ 
  Car car; 
  House house;  
  //聚合关系中作为成员变量的类一般使用set方法赋值 
   public void setCar(Car car){ 
    This.car = car; 
  } 
  public void setHouse(House house){ 
    This.house = house; 
  } 
 
  public void driver(){ 
    System.out.println(“车的型号:”+car.getType()); 
  } 
  public void sleep(){ 
    System.out.println(“我在房子里睡觉:”+house.getAddress()); 
  } 
} 

4.组合(Composition)

相比于聚合,组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。在下图的例子中,People与Soul、Body之间是组合关系,当人的生命周期开始时,必须同时有灵魂和肉体;当人的生命周期结束时,灵魂肉体随之消亡;无论是灵魂还是肉体,都不能单独存在,他们必须作为人的组成部分存在。

Public class People{ 
  Soul soul; 
  Body body;  
  //组合关系中的成员变量一般会在构造方法中赋值 
   Public People(Soul soul, Body body){  
    This.soul = soul; 
    This.body = body; 
  } 
 
  Public void study(){ 
    System.out.println(“学习要用灵魂”+soul.getName()); 
  } 
  Public void eat(){ 
    System.out.println(“吃饭用身体:”+body.getName()); 
  } 
} 

5.继承(Generalization)

        继承表示类与类(或者接口与接口)之间的父子关系。在java中,用关键字extends表示继承关系。UML图例中,继承关系用实线+空心箭头表示,箭头指向父类。

6.实现(Implementation)

表示一个类实现一个或多个接口的方法。接口定义好操作的集合,由实现类去完成接口的具体操作。在java中使用implements表示。UML图例中,实现关系用虚线+空心箭头表示,箭头指向接口。

在java中继承使用extends关键字,实现使用implements关键字,很直观。就不代码演示了。

相关文章

  • MyBatisPuls多数据源操作数据源偶尔报错问题

    MyBatisPuls多数据源操作数据源偶尔报错问题

    这篇文章主要介绍了MyBatisPuls多数据源操作数据源偶尔报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java中Map实现线程安全的3种方式

    Java中Map实现线程安全的3种方式

    本文主要介绍了Java中Map实现线程安全的3种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • AQS同步组件Semaphore信号量案例剖析

    AQS同步组件Semaphore信号量案例剖析

    这篇文章主要为大家介绍了AQS同步组件Semaphore信号量案例剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • SpringBoot集成tika实现word转html的操作代码

    SpringBoot集成tika实现word转html的操作代码

    Tika是一个内容分析工具,自带全面的parser工具类,能解析基本所有常见格式的文件,得到文件的metadata,content等内容,返回格式化信息,本文给大家介绍了SpringBoot集成tika实现word转html的操作,需要的朋友可以参考下
    2024-06-06
  • Java设计模式之java解释器模式详解

    Java设计模式之java解释器模式详解

    这篇文章主要介绍了Java设计模式之解释器模式定义与用法,结合具体实例形式详细分析了Java解释器模式的概念、原理、定义及相关操作技巧,需要的朋友可以参考下
    2021-09-09
  • JAVA对称加密算法PBE定义与用法实例分析

    JAVA对称加密算法PBE定义与用法实例分析

    这篇文章主要介绍了JAVA对称加密算法PBE定义与用法,结合实例形式分析了JAVA对称加密算法PBE的概念、原理、定义及使用方法,需要的朋友可以参考下
    2019-09-09
  • 在SpringBoot中实现一个订单号生成系统的示例代码

    在SpringBoot中实现一个订单号生成系统的示例代码

    在Spring Boot中设计一个订单号生成系统,主要考虑到生成的订单号需要满足的几个要求:唯一性、可扩展性、以及可能的业务相关性,本文给大家介绍了几种常见的解决方案及相应的示例代码,需要的朋友可以参考下
    2024-02-02
  • Java 入门图形用户界面设计之复选框

    Java 入门图形用户界面设计之复选框

    图形界面(简称GUI)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,本篇精讲Java语言中关于图形用户界面的复选框
    2022-02-02
  • Java实现基础银行ATM系统

    Java实现基础银行ATM系统

    这篇文章主要为大家详细介绍了Java实现基础银行ATM系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Java 实战范例之校园二手市场系统的实现

    Java 实战范例之校园二手市场系统的实现

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+SSM+mysql+maven+tomcat实现一个校园二手市场系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11

最新评论