依赖和关联的对比和区别

简介: 依赖和关联的对比和区别

依赖

理解分析

  1. 依赖关系在uml图中用虚线加箭头表示,箭头指向的类表示该类被依赖。
  2. 依赖体现的是一种使用和被使用的关系,例如下面的例子中举例的一样,人可以在开车的时候依赖汽车,当人不需要开车的时候就不依赖汽车。
  1. 依赖关系是uml五种关系中,耦合度最小的一种
  2. 生命周期很小,在依赖其他的类之后就结束了两个类之间的关系

三种表现形式:

  1. 被依赖的类作为方法参数传递给依赖类
  1. 被依赖的类在依赖类的方法中被声明和实例化
  2. 被依赖的类声明了一个静态公有的方法,依赖类在方法中直接通过类名点方法的形式调用。

UML图

代码实现

/**
 * @program: zwbStudy
 * @description: 汽车
 * @author: 翟文彪
 * @create: 2022-07-21 15:04
 **/
public class Car {
    public void move(){
        System.out.println("汽车移动");
    }
    public static void speedUp(){
        System.out.println("汽车加速");
    }
}
/**
 * @program: zwbStudy
 * @description: 人
 * @author: 翟文彪
 * @create: 2022-07-21 15:04
 **/
public class Person {
    // 第一种依赖形式
    private void drive(Car car){
        car.move();
    }
    // 第二种依赖形式
    private void drive(){
        Car car = new Car();
        car.move();
    }
    // 第三种依赖形式
    private void drive(String param){
        Car.speedUp();
    }
}

关联

理解分析

  1. 关联的关系用实线加箭头的形式表示,箭头指向的类时被关联的类
  2. 关联体现的关系比依赖更强
  1. 关联(Association)关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。在Java语言中,关联关系一般使用成员变量来实现。

UML图

代码实现

/**
 * @program: zwbStudy
 * @description: 地址
 * @author: 翟文彪
 * @create: 2022-07-21 15:10
 **/
public class Address {
    private String address;
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}
/**
 * @program: zwbStudy
 * @description:
 * @author: 翟文彪
 * @create: 2022-07-21 15:10
 **/
public class Customer {
    private Address address;
    // 注册
    private void register(){
        address.setAddress("安次区");
        System.out.println(address.getAddress());
    }
}

依赖和关联的区别

● 从耦合性的角度对比

发生依赖关系的两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或是某个方法的变量

发生关联关系的两个类,其中一个类作为另一个类的属性,属性是一种更为紧密的耦合关系,是更加长久的持有关系,所以关联的耦合性比依赖的耦合性更强

● 从两种关系各自存在的声明周期角度对比

依赖的生命周期仅仅存在于调用被依赖类的当前的方法中,方法结束后两个类之间的依赖关系也就结束了。

关联的关系是在类被实例化的时候就产生了,当类销毁的时候关联关系才结束

目录
相关文章
|
Java
Java 对象间关系(依赖、关联、聚合和组合)
面向对象设计 对象间关系:依赖、关联、聚合和组合,四种关系容易混淆。特别后三种,只是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。 
477 1
|
6月前
|
Java Maven Spring
Maven高级-继承、实施步骤及聚合与继承的区别
Maven高级-继承、实施步骤及聚合与继承的区别
71 0
18activiti - 流程管理定义(删除key相同的所有不同版本的流程定义)
18activiti - 流程管理定义(删除key相同的所有不同版本的流程定义)
46 0
|
6月前
|
算法 编译器 C语言
【C++模板的派生】探索C++模板中的依赖名称问题及其解决方案
【C++模板的派生】探索C++模板中的依赖名称问题及其解决方案
64 0
|
11月前
关联更新封装(二)
关联更新封装(二)
60 2
|
11月前
关联更新封装(三)
关联更新封装(三)
56 2
|
11月前
关联表更新封装
关联表更新封装
44 2
|
6月前
activiti并行网关执行时每个关联表的变化
activiti并行网关执行时每个关联表的变化
134 0
|
数据可视化 Java 开发工具
如何比较同一个项目中不同版本的区别
如何比较同一个项目中不同版本的区别
224 0
|
关系型数据库 索引
ES中通过join类型字段构建父子关联
ES中通过join类型字段构建父子关联
449 0
ES中通过join类型字段构建父子关联