1. 依赖(Dependency)
定义:一个类使用到另一个类的实例,通常是通过方法参数、局部变量等。依赖关系是最弱的关系,因为它仅仅表示类之间的临时关联。
特征:在 UML 图中,依赖关系用带箭头的虚线表示,箭头指向被依赖的类。
示例:
public class Driver { public void drive(Car car) { car.start(); } } public class Car { public void start() { System.out.println("Car started"); } }
在这个例子中,Driver
类依赖于 Car
类,因为 drive
方法使用了 Car
类的对象。
2. 关联(Association)
定义:关联是一种结构关系,描述了一个对象知道另一个对象的存在,并且可以和它进行交互。一个类中存在另一个类的对象作为成员变量,这种关系可以是双向的。关联通常是长期的,是类之间的一种静态关系。
特征:在 UML 图中,关联关系用带箭头或没有箭头的实线表示,箭头指向目标类。关联可以是双向的(双箭头)或单向的(单箭头)。
示例:
public class Person { private Address address; public Person(Address address) { this.address = address; } public Address getAddress() { return address; } } public class Address { private String street; public Address(String street) { this.street = street; } public String getStreet() { return street; } }
在这个例子中,Person
类和 Address
类之间是关联关系,Person
类持有 Address
类的引用。
3. 聚合(Aggregation)
定义:聚合是一种特殊的关联关系,它表示整体和部分之间的关系。聚合是“拥有”关系,但部分可以独立于整体存在。
特征:在 UML 图中,聚合用带有空心菱形的实线表示,菱形指向整体的一方。
示例:
public class Department { private List<Employee> employees; public Department() { this.employees = new ArrayList<>(); } public void addEmployee(Employee employee) { employees.add(employee); } } public class Employee { private String name; public Employee(String name) { this.name = name; } }
在这里,Department
和 Employee
是聚合关系。Department
作为整体,包含了 Employee
作为部分。Employee
可以脱离 Department
单独存在。
4. 组合(Composition)
定义:组合是一种更强的聚合关系,它也描述整体和部分的关系,但部分不能独立于整体存在。当整体销毁时,部分也会被销毁。
特征:在 UML 图中,组合用带有实心菱形的实线表示,菱形指向整体的一方。
示例:
public class House { private List<Room> rooms; public House() { rooms = new ArrayList<>(); rooms.add(new Room("Living Room")); rooms.add(new Room("Bedroom")); } } public class Room { private String name; public Room(String name) { this.name = name; } }
在这个例子中,House
和 Room
是组合关系。Room
作为 House
的一部分,不能脱离 House
独立存在。
5. 实现(Implementation)
定义:实现是指一个类实现了一个接口,它必须提供接口中定义的所有方法的具体实现。
特征:在 UML 图中,实现关系用带空心箭头的虚线表示,箭头指向接口。
示例:
public interface Animal { void makeSound(); } public class Dog implements Animal { public void makeSound() { System.out.println("Bark"); } }
在这个例子中,Dog
实现了 Animal
接口,这是实现关系。
6. 继承(Inheritance)
定义:继承是类与类之间的一种关系,表示一个类是另一个类的子类,它继承了父类的属性和方法。
特征:在 UML 图中,继承用带空心箭头的实线表示,箭头指向父类。
示例:
public class Animal { public void eat() { System.out.println("Animal is eating"); } } public class Cat extends Animal { public void meow() { System.out.println("Meow"); } }
在这个例子中,Cat
类继承了 Animal
类,这是一种继承关系。
总结
以上代码示例展示了设计模式中的六大关系的基本形式和应用场景。这些关系帮助我们理解和设计类与类之间的连接方式,以实现良好的代码结构和模块化。理解这些关系对于掌握面向对象设计和设计模式有着重要意义。