最近现看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: 实线+三角箭头
【UML类中的6种关系】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方法中,这种关系为依赖关系
推荐阅读
- 小小蚁国初期进化选择什么类型
- 小小蚁国中期进化类型怎么选择
- python基础--简单数据类型预览
- python基础-较复杂数据类型预览
- 工厂方法在Spring源码中的运用
- Java Style的C++容器流式处理类
- 我的世界信标怎么用,信标功能详细介绍(我的世界中的信标是怎么用的)
- 实时营销引擎在vivo营销自动化中的实践 | 引擎篇04
- 王者荣耀中的露娜,要怎么样玩才能练好招式呢
- 三十七 Java开发学习----SpringBoot多环境配置及配置文件分类