type
Post
status
Published
date
Jun 19, 2025
slug
design-patterns
summary
简单谈谈本人对设计模式的理解,设计模式还是蛮有用的东西
tags
推荐
考试
技术
category
技术分享
icon
password
comment
Show
一、OOP——UML——JAVA1. 类(Class)和对象(Object)2. 超类和子类3. 面向对象的内容3.1 抽象Abstraction3.2 封装Encapsulation3.3 继承Inheritance3.4 多态Polymorphism4. 类图中常用符号4.1 依赖(Dependency)4.2 关联(Association)4.3 聚合(Aggregation)4.4 组合(Composition)4.5 实现(Implementation)4.6 继承(Inheritance)
一、OOP——UML——JAVA
1. 类(Class)和对象(Object)

2. 超类和子类
ps:超类也叫父类

3. 面向对象的内容
3.1 抽象Abstraction
- 在特定环境中模拟真实物体的属性和行为
- 下图中根据不同情景抽象飞机这个类,前者注重飞机飞行属性,后者注重飞机座位的问题

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

3.3 继承Inheritance
- 主要好处:代码重用

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

4. 类图中常用符号
- 详细解释:类中常见符号

在面向对象设计中,依赖、关联、聚合、组合、实现和继承是常见的关系类型。每种关系具有不同的含义和适用场景。以下是这些关系的判断标准以及实际例子。
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 类提供了接口 Animal 中 speak 方法的具体实现。4.6 继承(Inheritance)
继承表示类与类之间的关系,表示一个类是另一个类的特殊化。子类继承父类的属性和方法,并可以扩展或重写父类的行为。
判断标准:
- 子类继承父类,表示子类是父类的一种特殊化。
- 子类获得父类的属性和行为。
示例:
在这个例子中,
Dog 类继承了 Animal 类,表示 Dog 是 Animal 的一种特殊化。Dog 继承了 Animal 的 eat 方法,并增加了 bark 方法。- 作者:Samuel Hu
- 链接:http://hjw-aihub.cn/article/design-patterns
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。









