最近现看Java设计模式,但是越看越不明白,一直搞不明白类与类之前的关系有哪些,通过几天的学习与整理通过代码实现的UML画图的方式理解类之间的相互关系。

一、类与类6大关系:

泛化(generalization)、实现(realization)、关联(association)、聚合(aggregation)、组合(compostion)、依赖(dependency)

二、类图的表示方法

public class Persion {
private String name;/*私有属性-*/
protected int age;/*保护的属性#*/
public static String school;/*公有静态属性+*/ public Persion(String name, int age, String schoole) {
this.name = name;
this.age = age;
} public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
} public void setAage(int age) {
this.age = age;
}
public int getAge() {
return age;
} /**
* 静态方法
* @param school
*/
public static void setSchool(String school) {
Persion.school = school;
}
public static String getSchool() {
return school;
}
}

通过类图表示类:-表示私有属性,+表示公有,#表示protected,下划线表示static静态

三、类与类之间的关系(以下通过代码和类图来说明)

1.泛化(继承)generalization: 实线+三角箭头

public class ZhangSan {
private String idCard; public ZhangSan(String idCard) {
this.idCard = idCard;
} public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getIdCard() {
return idCard;
}
}

Zhangsan类继承Person类,Person是Zhangsan的泛化,表示关系用实线的三角箭头关联

2. 实现realization: 虚线 + 三角箭头

public interface Human {
public void eat();
}
public class Man implements Human{
public void eat() {
System.out.println("man eat foot");
}
}

Man实现Human接口,实现和泛化是比较简单的两种类与类之间的关系

3. 关联association:实线 + 箭头

public class ZhangSan {
private String idCard;
public Study study; public ZhangSan(String idCard) {
this.idCard = idCard;
} public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getIdCard() {
return idCard;
} public Study getStudy() {
return study;
}
public void setStudy(Study study) {
this.study = study;
}
}
public class Study {
public void studyEnglish() {
System.out.println("study English");
}
public void studyChinese() {
System.out.println("study Chinese");
}
}

Zhangsan中有一个study属性,该属性是Study类的一个实例,Zhangsan类和Study类之间的关系为关联关系

4. 聚合aggregation:空菱形 + 实线

public class Car {
public Wheel wheel;
public Engine engine; public void setWheel(Wheel wheel) {
this.wheel = wheel;
}
public Wheel getWheel() {
return wheel;
} public void setEngine(Engine engine) {
this.engine = engine;
}
public Engine getEngine() {
return engine;
}
} public class Wheel { } public class Engine { }

聚合表示的是整体和部分的关系,但是这种整体和部分的关系是可以拆分的且部分的内容是可以单独存在的,这种关系的代码实现类似于多个关联。

5. 组合compostion 实菱形 + 实线

public class Persion {
public Head head;
public Leg leg;
public void setHead(Head head) {
this.head = head;
}
public Head getHead() {
return head;
} public void setLeg(Leg leg) {
this.leg = leg;
}
public Leg getLeg() {
return leg;
}
} public class Head { } public class Leg { }

Head类和Leg类是Person类的一部分,但是这部分不可以脱离Person单独存在,Person中的head、leg是Head、Leg类的两个例,代码实现上和聚合一样

6. 依赖dependency:虚线 + 箭头

public class Persion {
......public void callUp(Phone phone) {
phone.call();
}
} public class Phone {
public void call() {
System.out.println("call some one");
}
}

Person中新加一个callUp方法用来实现打电话功能,但是这个功能需要调用Phone类中的call方法,因此通过把phone实例通过参数传递到Person的callUp方法中,这种关系为依赖关系

UML类中的6种关系的更多相关文章

  1. uml类图的几种关系

    UML类图几种关系的总结   在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregati ...

  2. UML类图的几种关系总结【转】

    在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composit ...

  3. UML类图的几种关系总结

    本文摘自:UML类图关系总结 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregati ...

  4. 【转】UML类图符号 6种关系说明以及举例

    转自http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html UML中描述对象和类之间相互关系的方式包括:依赖(Dependency) ...

  5. C# UML类图及类之间的几种关系

    今天晚上看了大话设计模式中的UML类图这一节感觉受益匪浅,好多年不能理解的类之间的关系理解了. 一.UML类图的表示方法 1.类的表示方法 A类用一个矩形框分三层表示,第一层是类名,斜体类名表示抽象类 ...

  6. UML中的几种关系(UML Relationships)

    依赖(Dependency) 依赖可以理解为一个类A使用到了另一个类B,而这种使用关系是具有偶然性的.临时性的.非常弱的,但是B类的变化会影响到A:比如某人要过河,需要借用一条船,此时人与船之间的关系 ...

  7. 【转】UML中的几种关系详细解析

    UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...

  8. UML ——区分类图中的几种关系.md

    目录 关联关系 (association): 聚合关系 (aggregation): 合成关系 (composition): 依赖关系 (dependency): 总结: 原文地址 http://ww ...

  9. UML---UML中的几种关系(依赖,关联,泛化,实现)

    关于设计模式的总结没有落实到代码上,而且设计模式自己确实动手实现的非常少.所以在这一周里,除了看网站开发的视频,着手开始对设计模式进行实现以下.设计模式非常经典,每次看都有不同的收获,写一下自己的收获 ...

随机推荐

  1. Gauss 消元法

    目录 1. 线性方程组 2. 球形空间产生器sphere 3. 臭气弹 4. 开关问题 错乱瞎写 1. 线性方程组 省流:初等行变换化为一个上三角,然后瞬间出解 inline bool z(const ...

  2. 物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_221 一般情况下,大家对Python原生的并发/并行工作方式:进程.线程和协程的关系与区别都能讲清楚.甚至具体的对象名称.内置方法 ...

  3. [b01lers2020]Welcome to Earth-1

    1.打开之后界面如下,查看源代码信息,发现chase文件,结果如下: 2.访问chase文件会一直跳转到die界面,那就只能抓包进行查看,发现leftt文件,结果如下: 3.访问leftt文件并查看源 ...

  4. while,do while,for循环语句

    循环语句 循环包含三大语句-----while语句 do while语句 for语句 循环三要素 初始值(初始的变量值) 迭代量(基于初始值的改变) 条件(基于初始值的判断) while语句 var ...

  5. 6.6 NOI 模拟

    \(T1\)括号序列 --那是,朝思夜想也未尝得到的自由 一个比较常见的转化,考虑如何判断前一段和后一段能够拼成一个合法的括号序列 充要条件: 前半部分,'('看为\(1\), ')'看为\(-1\) ...

  6. 「Python实用秘技10」深度比较Python对象间差异

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第10 ...

  7. 【安全通报】DolphinScheduler 漏洞情况说明

    Apache DolphinScheduler 社区邮件列表最近通告了 2 个漏洞,考虑到有很多用户并未订阅此邮件列表,我们特地在此进行情况说明: CVE-2020-11974[1] 漏洞 (CVE- ...

  8. Hive存储格式之RCFile详解,RCFile的过去现在和未来

    我在整理Hive的存储格式和压缩格式,本来打算一篇发出来,结果其中一小节就有很多内容,于是打算写成Hive存储格式和压缩格式系列. 本节主要讲一下Hive存储格式最早的典型的列式存储格式RCFile. ...

  9. Servlet特性研究之异步模式

    Servlet只有同步模型是怎样的? 异步处理是Servlet3.0版本的重要功能之一,分析异步处理模型之前,先看看同步处理的过程是怎样的: 客户端发起HTTP请求一个动态Servlet API,请求 ...

  10. 解决使用(Jenkins检出代码)git clone检出代码提示必须安装 .NET framework,Version =v4.7.2

    一.事件背景 真的是非常想使用pipeline流水线进行自动化部署打包测试. 于是,晚上下班回家后,真的是"现学现卖",开始做流水线脚本. 经过不懈努力,熬到凌晨两点多,终于把整个 ...