对象之间的四种关系<附代码>(依赖、关联、聚合、组合)

除了实现和继承之外,对象之间还有四种关系:依赖、关联、聚合、组合

依赖

依赖是类之间最基础的、也是最微弱的关系类型。

如果修改一个类的定义可能会造成另一个类的变化,那么这两个类之
间就存在依赖关系。
当你在代码中使用具体类的名称时,通常意味着存在依赖关系。例如在指定方法签名类型时,或是通过调用构造函数对对象进行初始化时等。

具体体现:依赖者调用被依赖者的局部变量、参数、静态方法;

例子:人类(Human)的生存(live)依赖于食物(Food)

UML图:
在这里插入图片描述
代码示例:

public class Human{
        public void live(Food food){
            food.eat();
        }
    }
    class Food{
        public void eat(){
            System.out.println("吃东西");
        }
    }

关联

关联是一个对象使用另一对象或与另一对象进行交互的关系。可以是双向,也可以是单向。

关联可视为一种特殊类型的依赖,即一个对象总是拥有访问与其交互的对象的权限,而简单的依赖关系并不会在对象间建立永久性的联系。

具体体现:关联的对象作为一个对象的成员变量

UML:
在这里插入图片描述

代码示例

public class Human{
        private Food food;
        public void live(){
            food.eat();
        }
    }
    class Food{
        public void eat(){
            System.out.println("吃东西");
        }
    }

聚合

聚合是一种特殊类型的关联,用于表示多个对象之间的“一对多”、“多对多”或“整体对部分”的关系。通常在聚合关系中,一个对象“拥有”一组其他对象,并扮演着容器或集合的角色。

具体体现:被聚合对象作为成员变量

例子:人体主要是由水、血液和肌肉聚合成的

UML:

在这里插入图片描述

代码示例:

public class Human{
        private Blood blood;
        private Water water;
        private Muscles muscles;
        public void body(Blood blood,Water water,Muscles muscles){
            this.blood=blood;
            this.water=water;
            this.muscles=muscles;
        }
    }
    class Blood{

    }
    class Water{

    }
    class Muscles{

    }

组合

比聚合更强的关联关系;组合是一种特殊类型的聚合,其中一个对象由一个或多个其他对象实例构成。组合与其他关系的区别在于组件仅能作为容器的一部分存在。

具体体现:个体对象作为成员变量

例子: 人和人的心脏、大脑

UML:
在这里插入图片描述
代码示例:

public class Human {
    private Brain brain;
    private Heart heart;
    private String status;

    public void sustainLife() {
        brain.control(status);
        heart.beat(status);
    }

    public Human(Brain brain, Heart heart, String status) {
        this.brain = brain;
        this.heart = heart;
        this.status = status;
    }
}

class Brain {
    public void control(String status) {
        if (status.equals("0")) {
            System.out.println("脑死亡");
        } else {
            System.out.println("大脑控制身体");
        }
    }
}

class Heart {
    public void beat(String status) {
        if (status.equals("0")) {
            System.out.println("心跳停止");
        } else {
            System.out.println("心脏跳动");
        }
    }
}

总结

对象和类之间的关系:从弱到强。

在这里插入图片描述
• 依赖:对类 B 进行修改会影响到类 A 。

• 关联:对象 A 知道对象 B。类 A 依赖于类 B。

• 聚合:对象 A 知道对象 B 且由 B 构成。类 A 依赖于类 B。

• 组合:对象 A 知道对象 B、由 B 构成而且管理着 B 的生命周期。类 A 依赖于类 B。

• 实现:类 A 定义的方法由接口 B 声明。对象 A 可被视为对象B。类 A 依赖于类 B。

• 继承: 类 A 继承类 B 的接口和实现, 但是可以对其进行扩展。对象 A 可被视为对象 B。类 A 依赖于类 B。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1) 优秀的程序应该是这样的:阅读时,感觉很优雅;新增功能时,感觉很轻松;运行时,感觉很快速,这就需要设计模式支撑。2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,但是不知道怎么使用到真实项目。本课程针对上述问题,有针对性的进行了升级 (1) 授课方式采用 图解+框架源码分析的方式,让课程生动有趣好理解 (2) 系统全面的讲解了设计模式,包括 设计模式七大原则、UML类图-类的六大关系、23种设计模式及其分类,比如 单例模式的8种实现方式、工厂模式的3种实现方式、适配器模式的3种实现、代理模式的3种方式、深拷贝等3) 如果你想写出规范、漂亮的程序,就花时间来学习下设计模式吧课程内容和目标本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联聚合组合) 23种设计模式包括:创建型模式:单例模式(8种实现)、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式(3种实现)、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式(3种实现)。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)2) 学习目标:通过学习,学员能掌握主流设计模式,规范编程风格,提高优化程序结构和效率的能力。
之间有以下六种关系:继承、实现、依赖关联组合聚合。下面我将逐一介绍这些关系,并给出相应的类图和典型代码。 1. 继承(Inheritance): 继承是指一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类可以继承父类的公共成员,并且可以添加自己的特定成员。继承关系用箭头指向父类。 类图示例: ``` +--+ | 父类 | +--+ | 属性和方法 | +--+ ^ | +--+ | 子类 | +--+ | 属性和方法 | +--+ ``` 典型代码示例: ```python class Animal: def __init__(self, name): self.name = name def eat(self): print("Animal is eating...") class Dog(Animal): def bark(self): print("Dog is barking...") dog = Dog("Tom") dog.eat() # 调用继承自父类的方法 dog.bark() # 调用子类自己的方法 ``` 2. 实现(Implementation): 实现是指一个类实现了一个接口或抽象类定义的方法。实现关系用带空心箭头的虚线表示。 类图示例: ``` +--+ | 接口/抽象类 | +--+ | 方法定义 | +--+ ^ | +--+ | 类 | +--+ | 方法实现 | +--+ ``` 典型代码示例: ```python from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height rect = Rectangle(5, 3) print(rect.area()) # 调用实现的方法 ``` 3. 依赖(Dependency): 依赖是指一个类在某个方法中使用了另一个类作为参数或局部变量。依赖关系用带箭头的虚线表示。 类图示例: ``` +--+ | 类A | +--+ | 方法 | +--+ ^ | +--+ | 类B | +--+ ``` 典型代码示例: ```python class Car: def __init__(self, engine): self.engine = engine def start(self): self.engine.start() class Engine: def start(self): print("Engine is starting...") engine = Engine() car = Car(engine) car.start() # 调用依赖的方法 ``` 4. 关联(Association): 关联是指一个类与另一个类有某种关系,但彼此之间没有强依赖关联关系用带箭头的实线表示。 类图示例: ``` +--+ | 类A | +--+ | 属性和方法 | +--+ | | +--+ | 类B | +--+ | 属性和方法 | +--+ ``` 典型代码示例: ```python class Student: def __init__(self, name): self.name = name class Course: def __init__(self, name): self.name = name student = Student("Tom") course = Course("Math") student.course = course # 关联两个类的实例 ``` 5. 组合(Composition): 组合是指一个类包含另一个类的对象,并且包含的对象的生命周期与包含它的类相同。组合关系用带实心菱形的实线表示。 类图示例: ``` +--+ | 类A | +--+ | 属性和方法 | | - 类B的对象 | +--+ | | +--+ | 类B | +--+ | 属性和方法 | +--+ ``` 典型代码示例: ```python class Engine: def start(self): print("Engine is starting...") class Car: def __init__(self): self.engine = Engine() def start(self): self.engine.start() car = Car() car.start() # 调用组合对象的方法 ``` 6. 聚合(Aggregation): 聚合是指一个类包含另一个类的对象,但包含的对象的生命周期可以独立于包含它的类。聚合关系用带空心菱形的实线表示。 类图示例: ``` +--+ | 类A | +--+ | 属性和方法 | | - 类B的对象 | +--+ | | +--+ | 类B | +--+ | 属性和方法 | +--+ ``` 典型代码示例: ```python class Department: def __init__(self, name): self.name = name class Employee: def __init__(self, name, department): self.name = name self.department = department department = Department("HR") employee = Employee("Tom", department) # 聚合两个类的实例 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值