type
Post
status
Published
date
Jun 19, 2025
slug
design-patterns
summary
简单谈谈本人对设计模式的理解,设计模式还是蛮有用的东西
tags
推荐
考试
技术
category
技术分享
icon
password
comment
Show

一、OOP——UML——JAVA

1. 类(Class)和对象(Object)

notion image

2. 超类和子类

ps:超类也叫父类
notion image

3. 面向对象的内容

3.1 抽象Abstraction

  • 在特定环境中模拟真实物体的属性和行为
    • 下图中根据不同情景抽象飞机这个类,前者注重飞机飞行属性,后者注重飞机座位的问题
notion image

3.2 封装Encapsulation

  • 向他人隐藏对象部分状态和行为,并提供一套有限的接口(Interface)
  • 区分接口与抽象类
    • 接口(Interface):
      • 接口是一种完全抽象的类,表示一组行为的规范(即方法的声明),类通过实现接口来“承诺”提供这些行为的具体实现。
      • 接口通常用于表示类之间的“能力”,即类能做什么,而不关心它们如何做。
      • 只能有常量(public static final),不能有实例变量。接口中的成员变量默认是 public static final,即常量。
      • 一个类可以实现多个接口(Java 支持多重接口实现)。接口用于定义一组行为的标准,类通过实现接口来获得这些行为。
      • 接口是通过 implements 关键字来实现的。
    • 抽象类(Abstract Class):
      • 抽象类是一个不能实例化的类,它可以包含已实现的方法、未实现的方法(抽象方法)和字段。抽象类可以提供部分实现,并留给子类去实现剩余部分。
      • 抽象类通常用于表示一个“类”的通用概念,类的公共行为可以放在抽象类中,子类可以继承并扩展这些行为。
      • 可以包含实例变量,且可以有任何访问修饰符,可以是普通字段(privateprotectedpublic),不需要是常量。
      • 一个类只能继承一个抽象类,因为 Java 不支持多重继承(避免了“钻石问题”)。抽象类用于提供通用的行为,而子类可以继承这些行为并进行扩展。
      • 抽象类是通过 extends 关键字来继承的。
    • 总结:
      • 特点
        接口 (Interface)
        抽象类 (Abstract Class)
        方法实现
        只能有抽象方法(Java 8 之后可有默认方法)
        可以有抽象方法和具体方法
        成员变量
        只能有常量(public static final)
        可以有实例变量
        构造方法
        不能有构造方法
        可以有构造方法
        继承与实现
        一个类可以实现多个接口
        一个类只能继承一个抽象类
        多重继承
        支持多重接口继承
        不支持多重继承
        访问修饰符
        默认是 public
        可以是 publicprotectedprivate
        适用场景
        定义不相关类的共同功能
        定义相关类的通用特性并提供部分实现
  • 分为Public(+)、Private(-)、Protected(#)三种,后续会给出对比
    • 下图中,对于Airport类中对于origindestinationpassengers提供一个fly接口,不同飞机类型提供不同的实现方法
notion image

3.3 继承Inheritance

  • 主要好处:代码重用
notion image

3.4 多态Polymorphism

  • 采用多种方式执行一个动作
  • 检测对象真是类别并调用其实现的机制
notion image

4. 类图中常用符号

notion image
在面向对象设计中,依赖、关联、聚合、组合、实现和继承是常见的关系类型。每种关系具有不同的含义和适用场景。以下是这些关系的判断标准以及实际例子。

4.1 依赖(Dependency)

依赖是指一个类使用另一个类的方法或属性。通常发生在方法参数传递或临时对象的创建上。依赖关系一般是的,表示一个类依赖另一个类的功能,但不长期拥有它。
判断标准:
  • 一个类在方法中使用了另一个类的对象,通常是作为参数或局部变量。
  • 类之间的关系是临时的,表示一种“使用”关系。
示例:
在这个例子中,Car 类依赖 Engine 类的功能,但这种关系是临时的,Car 只是在执行某个方法时使用 Engine,并不持有 Engine 对象。

4.2 关联(Association)

关联是类之间的较弱关系,表示对象之间的联系。关联关系一般是双向的,一个类持有另一个类的引用。关联可以是单向双向的。
判断标准:
  • 类之间通过成员变量持有对方的引用。
  • 关联表示类之间的长期关系,通常存在某种“拥有”或“连接”关系。
示例:
在这个例子中,School 类持有 Student 类的引用,表示学校和学生之间的关联关系。

4.3 聚合(Aggregation)

聚合是一种特殊的关联关系,表示“整体-部分”的关系,且部分对象可以独立于整体存在。聚合表示的是一种拥有关系,但子对象可以在整体对象生命周期之外存在。
判断标准:
  • 一方是整体,另一方是部分。
  • 部分对象可以独立于整体存在。
示例:
在这个例子中,Department 类聚合了 Employee 类。Employee 可以独立于 Department 存在,即员工可以没有隶属于某个部门。

4.4 组合(Composition)

组合是一种强关联的聚合关系,表示“整体-部分”的关系,且部分对象的生命周期依赖于整体。组合表示的是强拥有关系,部分对象不能独立于整体对象存在。
判断标准:
  • 一方是整体,另一方是部分,且部分对象的生命周期由整体管理。
  • 部分对象不能在整体对象销毁后存活。
示例:
在这个例子中,House 类包含 Room,而且 Room 不能独立于 House 存在。如果房子被销毁,房间也随之消失,这就是组合关系。

4.5 实现(Implementation)

实现是指一个类实现一个接口,表示类与接口之间的关系。实现关系表示类的行为约定,即类承诺提供接口中定义的功能。
判断标准:
  • 一个类实现一个接口,表示它提供了接口声明的方法的实现。
  • 接口定义了行为,类提供了具体的实现。
示例:
在这个例子中,Dog 类实现了 Animal 接口,表示 Dog 类提供了接口 Animalspeak 方法的具体实现。

4.6 继承(Inheritance)

继承表示类与类之间的关系,表示一个类是另一个类的特殊化。子类继承父类的属性和方法,并可以扩展或重写父类的行为。
判断标准:
  • 子类继承父类,表示子类是父类的一种特殊化。
  • 子类获得父类的属性和行为。
示例:
在这个例子中,Dog 类继承了 Animal 类,表示 DogAnimal 的一种特殊化。Dog 继承了 Animaleat 方法,并增加了 bark 方法。
代码随想录Java基础笔记
Loading...
Samuel Hu
Samuel Hu
沪上985软工在读 喜欢写代码 爱折腾的混子
小红书
统计
文章数:
24
公告

你好呀!👋

🎓 同济大四 + 浙大研0
🔍 我的研究聚焦在 AISE(AI for Software Engineering) 领域✨
🤖 具体方向有两个特别让我着迷的:
  • Code Reasoning 🧠💻
  • Code Generation ✨📝
💡 我相信AI与软件工程的结合会改变未来的开发方式,很开心能在这个交叉领域学习成长~
👥 欢迎大家多多交流!💬