UML类图
UML类图
用图来表示类与类之间抽象关系的图叫做类图
笔记总结来源于:B站尚硅谷——Java设计模式
类之间的关系有:依赖、泛化、实现、关联、聚合和组合
类图的安装
本篇文章采用vscode安装PlantUML来实现类图的设计
一、依赖
如果一个类中是用到了另外一个类,那么这两个类之间就存在依赖关系
public class Demo06 {
public static void main(String[] args) {
}
}
class Test1{
Test2 b = new Test2();
public void fun1(Test3 c){
}
public Test4 fun2(){
return null;
}
}
class Test2{
}
class Test3{
}
class Test4{
}
程序中类Test都使用到了Test2,Test3,Test4类,因此Test1类与Test2,Test3,Test4类存在依赖关系
(关于类图语法推荐这篇博客)
根据代码编写以下类图
@startuml 122
class Test1{
Test2 b;
void fun1(Test3 c);
Test4 fun2();
}
class Test2{
}
class Test3{
}
class Test4{
}
Test1 ...> Test2
Test1 ...> Test3
Test1 ...> Test4
@enduml
可以的到以下类图
二、泛化关系
泛化关系其实是依赖关系的一种特例,其实就是继承关系
public class Demo07 {
public static void main(String[] args) {
}
}
class Test1{
}
class Test2 extends Test1{
}
对应的UML类图为:
@startuml 122
class Test1{
}
class Test2{
}
Test2 ---|> Test1
@enduml
三、实现
对接口或者抽象类的实现关系
public class Demo08 {
public static void main(String[] args) {
}
}
interface Interface1{
public void sayHello();
}
class Test implements Interface1{
public void sayHello(){
System.out.println("hello world!!!");
}
}
对应的UML类图为:
@startuml 122
interface Interface1{
void sayHello();
}
class Test1 implements Interface1{
}
@enduml
四、关联
关联关系也是依赖关系的特例,分为双向关联和单向关联
4.1单向关联
public class Demo09 {
public static void main(String[] args) {
}
}
class Test1{
}
class Test2{
private Test1 test1;
}
@startuml 122
class Test1{
}
class Test2{
private Test1 test1;
}
Test2 ---> Test1
@enduml
4.2双向关联
public class Demo09 {
public static void main(String[] args) {
}
}
class Test1{
private Test2 test2;
}
class Test2{
private Test1 test1;
}
@startuml 122
class Test1{
private Test2 test2;
}
class Test2{
private Test1 test1;
}
Test2 --- Test1
@enduml
五、聚合
关联关系的一种特例,在创建A类时可以剥离关联对象的就叫聚合
public class Demo09 {
public static void main(String[] args) {
}
}
class Test1{
private Test2 test2;
public void setTest2(Test2 test2){
this.test2 = test2;
}
}
class Test2{
}
在这个代码中,在创建Test1时,属性test2不是必须的,我可以之后在通过方法设置他,因此可以理解为可以剥离出来,此方式就叫做聚合
@startuml 122
class Test1{
private Test2 test2;
}
class Test2{
}
Test2 ---o Test1
@enduml
六、组合
关联关系的一种特例,在创建A类时不可剥离关联对象的就叫组合
public class Demo09 {
public static void main(String[] args) {
}
}
class Test1{
private Test2 test2 = new Test2;
}
class Test2{
}
在这个代码中,在创建Test1时,test2已经被创建了,因此可以理解为可以不可剥离出来,此方式就叫做组合
@startuml 122
class Test1{
private Test2 test2;
}
class Test2{
}
Test2 ---* Test1
@enduml