类图是一种表示系统中的类、接口、属性和方法等静态结构的图形语言,常用于面向对象的软件设计、分析,对技术实现起到指导作用,是架构师的常用工具之一。通过类图,可以更好地理解系统的结构和设计,提高开发效率和软件质量。对于学习过设计模式的同学来说,肯定会有更深刻的感触,正是因为有类图我们更直观的理解各种模式的实现方式,并按照类图的指导去完成我们自己的设计模式代码。
类的表示方式主要包括:类与接口、属性与方法、访问权限的表示方式。类与接口可以通过矩形框来表示,其中包含类的名称、属性和方法;属性与方法可以在方框的第二行写出来,在属性和方法的左边还会用一些符号来表示访问权限;访问权限可以用+-#无符号来表示。
类之间的关系一共有6种,耦合程度由强到弱可以表示为:实现 = 泛化 > 组合 > 聚合 > 关联 > 依赖。其中,实现和泛化表示实体与其子类之间的联系;组合、聚合和关联表示实体与其父类之间的联系;依赖表示实体与其依赖项之间的联系。
类B接口A类B类A
3.2.关联、聚合、组合
has-a
关联
关系表示为实线,聚合和组合是在关联的基础上加入了菱形来表示,聚合表示为空心菱形,组合表示为实心菱形。如果将一个类作为包含类,那么它的成员变量中的类就是成员类,菱形是画在包含类这一端。上面的表示方式是部分教程了较为标准的一种画法,但有时候也会看到另一种画法,在实现上会带上箭头。之所以要学习这种画法,主要是在看资料的时候遇到两种不同的画法都能看得懂。
3.2.1.用代码表达关联关系
所谓的关联关系,就是一个类中使用了另一个类作为成员变量。至于这个成员变量是如何被使用的,并不是关联关系需要关注的。
StudentCourse
class Student { Course course; }
class Course { Student student; }
同理,如果是单向关联,则可以表示为:
class Student { Course course; }
class Course { }
3.2.2.用代码表达组合关系
has-a
PersonHeartHeartPersonnew
class Person { private Heart heart; public Person() { this.heart = new Heart(); } }
class Heart { }
3.2.3.用代码表达聚合关系
has-a
ComputerKeyboard构造方法setter方法
以下是对给定内容的重构:
## 类和接口描述及关系设计
### 构造方法注入与设置注入
在Spring中,依赖实现方式主要通过聚合的方式来实现。我们可以通过以下两种方式进行依赖注入:
- 构造方法注入:通过构造方法的参数进行依赖注入。
- setter方法注入:通过setter方法进行依赖注入。
### 依赖关系代码实现
以下是一个示例,展示了如何使用构造方法和setter方法进行依赖注入:
```java
class Computer {
private Keyboard keyboard;
// 通过构造方法的参数注入
public Computer(Keyboard keyboard) {
this.keyboard = keyboard;
}
// 通过setter方法注入
public void setKeyboard(Keyboard keyboard) {
this.keyboard = keyboard;
}
}
class Keyboard {
}
```
### CarFactory类和Car类之间的依赖关系
`CarFactory`类负责创建`Car`对象。下面是一个示例代码片段:
```java
class CarFactory {
public Car createCar() {
return new Car();
}
}
class Car {
}
```
在这个示例中,`CarFactory`通过构造方法注入了一个`Car`对象。
### 学生选择课程的基数关系设计
在学生和课程之间的关系中,一个学生至少选择一门课程,有余力的可以选择多门。这表示了一种一对多的依赖关系。可以使用集合来表示这种关系,如下所示:
```java
class Student {
List
}
class Course {
}
```
在这个例子中,`Student`类包含一个`courses`属性,它是一个`Course`对象的列表,表示学生可以选择多个课程。