- 依赖:少了你就做不了,你用了我的对象,一个类作为另一个类的构造函数参数、方法参数、方法返回值、方法内局部变量,一个类在方法中使用了另一个类的对象
- 关联:一个类的对象作为另一个类的成员变量,箭头指向被引用的类
- 聚合:大雁和雁群一样,无共同生命周期
- 组合:有共同的生命周期,你没了我也没了
- 泛化:继承关系
- 实现:接口和类
1. 依赖关系 (Dependency)
// 情况1: 作为构造函数参数
class Car {private Engine engine;public Car(Engine engine) { // 依赖Enginethis.engine = engine;}
}// 情况2: 作为方法参数
class Driver {public void drive(Car car) { // 依赖Carcar.start();}
}// 情况3: 作为方法返回值
class CarFactory {public Car produceCar() { // 依赖Carreturn new Car(new Engine());}
}// 情况4: 作为方法局部变量
class Mechanic {public void repair() {Tool tool = new Tool(); // 依赖Tooltool.use();}
}// 情况5: 方法中使用另一个类的对象
class Person {public void travel() {Car car = new Car(new Engine()); // 依赖Car和Enginecar.start();}
}
2. 关联关系 (Association)
class Student {private Teacher teacher; // 关联Teacher (成员变量)public void setTeacher(Teacher teacher) {this.teacher = teacher;}
}class Teacher {// 教师可以有学生,但这里不强制持有学生引用
}
3. 聚合关系 (Aggregation)
class GooseGroup { // 雁群private List<Goose> geese; // 聚合Goose (大雁可以独立存在)public GooseGroup(List<Goose> geese) {this.geese = geese;}
}class Goose {// 大雁可以独立于雁群存在
}
4. 组合关系 (Composition)
class Human { // 人private Heart heart; // 组合Heart (心脏不能独立于人存在)public Human() {this.heart = new Heart(); // 生命周期绑定}
}class Heart {// 心脏不能独立于人存在
}
5. 泛化关系 (Generalization)
class Animal { // 父类public void eat() {System.out.println("Eating...");}
}class Dog extends Animal { // 继承Animalpublic void bark() {System.out.println("Woof!");}
}
6. 实现关系 (Implementation)
interface Flyable { // 接口void fly();
}class Bird implements Flyable { // 实现Flyable接口@Overridepublic void fly() {System.out.println("Bird flying");}
}class Airplane implements Flyable {@Overridepublic void fly() {System.out.println("Airplane flying");}
}
UML关系图示对应
依赖(Dependency): ---->
关联(Association): ——>
聚合(Aggregation): ——◇
组合(Composition): ——◆
泛化(Generalization): ——▷
实现(Implementation): - - -▷