Java设计模式UML之类图精解

目录
  • 1.UML基本介绍
  • 2.UML类图
    • 2.1 类关系——依赖
    • 2.2 类关系——泛化
    • 2.3 类关系——实现
    • 2.4 类关系——关联
    • 2.5 类关系——聚合
    • 2.6 类关系——组合

1.UML基本介绍

  • UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。
  • UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如下图:

上面的截图就是一个UML类图的案例,只不过这是在eclipse中的,下面的类图我会在IDEA中使用。

画UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,UML图分类:

  • 用例图 (use case)
  • 静态结构图:  类图、对象图、包图、组件图、部署图
  • 动态行为图:  交互图(时序图与协作图)、状态图、活动图

类图是描述类与类之间的关系的,是UML图中最核心的。

2.UML类图

用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。

类之间的关系:  依赖、泛化(继承)、实现、关联、聚合与组合。

2.1 类关系——依赖

只要是在类中用到了对方,那么他们之间就存在依赖关系。   来看下面的代码

package com.szh.uml.dependence;

public class PersonServiceBean {
	private PersonDao personDao;

	public void save(Person person) {
	}

	public IDCard getIDCard(Integer personId) {
		return null;
	}

	public void modify() {
		Department department = new Department();
	}
}
package com.szh.uml.dependence;

public class PersonDao {
}
package com.szh.uml.dependence;

public class Person {
}
package com.szh.uml.dependence;

public class IDCard {
}
package com.szh.uml.dependence;

public class Department {
}

上面的代码中,PersonServiceBean类中用到了Department、Person等这几个类,那么我们就可以说PersonServiceBean类与它们几个类之间存在依赖关系。

  • 类中用到了对方
  • 类的成员属性
  • 方法的返回类型
  • 方法接收的参数类型
  • 方法体内部使用到

依赖的符号就是 虚线 + 一个箭头。

2.2 类关系——泛化

泛化实际上就是继承,它是依赖关系的一种特例。

如果A类继承了B类,那么我们就可以说 A和B 之间存在泛化关系。

package com.szh.uml.generalization;

public abstract class DaoSupport {

	public void save(Object entity) {
	}

	public void delete(Object id) {
	}
}
package com.szh.uml.generalization;

public class PersonServiceBean extends DaoSupport {
}

继承就不再多说了,这里需要指出的一点是:IDEA中的泛化符号不太一样,一般来说,泛化的符号应该是 实线 + 一个空心三角形,而IDEA中则是下图这样。

2.3 类关系——实现

实现关系其实就是面向接口而言,它和泛化一样,也是依赖关系的一种特例。

如果A类实现了接口B,那么我们就可以说A和B之间存在实现关系。

package com.szh.uml.implementation;

public interface PersonService {

	public void delete(Integer id);

}
package com.szh.uml.implementation;

public class PersonServiceBean implements PersonService{

	@Override
	public void delete(Integer id) {
		System.out.println("delete..");
	}

}

实现接口这个也不再多说了。 这里需要指出的一点是:IDEA中的实现符号不太一样,一般来说,实现的符号应该是 虚线 + 一个空心三角形,而IDEA中则是下图这样。

2.4 类关系——关联

关联关系 实际上就是类与类之间的联系,他是依赖关系的特例。关联具有导航性:  即双向关系或单向关系。

关系具有多重性:  如“1”(表示有且仅有一个),“0...”(表示0个或者多个),“0,1”(表示0个或者一个),“n.….m”(表示n到 m个都可以), "m.….*”(表示至少m个)

package com.szh.uml.association1;

/**
 *
 */
public class Person {
    private IDCard card;
}
package com.szh.uml.association1;

/**
 *
 */
public class IDCard {
}

这里我们的理解就是Person类表示人,IDCard类表示身份证类,一个人只有一个身份证号、一个身份证号只属于一个人,所以它俩之间就存在着一对一的关联关系。  关联的符号就是 实线 + 一个箭头。

下图是单向的关联关系,当我们在IDCard类中声明了Person类的成员变量时,这二者之间的关联关系就转换成了双向。(图中还有组合符号,我们后面会说)

2.5 类关系——聚合

聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。

如:  一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示。

package com.szh.uml.aggregation;

public class Computer {

	private Mouse mouse;
	private Monitor monitor;

	public void setMouse(Mouse mouse) {
		this.mouse = mouse;
	}
	public void setMonitor(Monitor monitor) {
		this.monitor = monitor;
	}

}
package com.szh.uml.aggregation;

public class Monitor {
}
package com.szh.uml.aggregation;

public class Mouse {
}

聚合的符号一般来说应该是 实线 + 空心菱形,组合的符号则是 实线 + 实心菱形,IDEA中聚合、组合的符号都是下图这样。

2.6 类关系——组合

组合关系:  也是整体与部分的关系,但是整体与部分不可以分开。

再看一个案例:在程序中我们定义实体: Person与IDCard、Head,那么 Head和 Person 就是组合, IDCard 和Person就是聚合。

但是如果在程序中 Person实体中定义了对IDCard进行级联删除,即删除Person时连同IDCard 一起删除,那么IDCard和 Person就是组合了。

package com.szh.uml.composition;

public class Computer {

	private Mouse mouse = new Mouse();
	private Monitor monitor = new Monitor();

	public void setMouse(Mouse mouse) {
		this.mouse = mouse;
	}

	public void setMonitor(Monitor monitor) {
		this.monitor = monitor;
	}

}
package com.szh.uml.composition;

public class Monitor {
}
package com.szh.uml.composition;

public class Mouse {
}
package com.szh.uml.composition;

public class Person {
    private IDCard card;
    private Head head = new Head();
}
package com.szh.uml.composition;

public class Head {
}
package com.szh.uml.composition;

public class IDCard {
}

到此这篇关于Java设计模式UML之类图精解的文章就介绍到这了,更多相关Java 设计模式类图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解java设计模式中的门面模式

    门面模式又叫外观模式(Facade Pattern),主要用于隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口. 我们知道电视剧操作很简单,但是里面的设计和原理很少人明白,这就是因为电视剧的设计应用了门面模式 一个电视剧至少需要有以下几个模块的功能:信号输入.音频处理.视频处理.信号输出等 /** * 射频信号输入 */ public class SignalIn { // } * 音频/视频信号输出 public class SignalOut { * 音频处理 public c

  • Java设计模式之单例模式示例详解

    目录 0.概述 1.饿汉式 1.1 饿汉式单例实现 1.2 破坏单例的几种情况 1.3 预防单例的破坏 2.枚举饿汉式 2.1 枚举单例实现 2.2 破坏单例 3.懒汉式 4.双检锁懒汉式 5.内部类懒汉式 6.JDK中单例的体现 0.概述 为什么要使用单例模式? 在我们的系统中,有一些对象其实我们只需要一个,比如说:线程池.缓存.对话框.注册表.日志对象.充当打印机.显卡等设备驱动程序的对象.事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常.

  • 深入理解Java设计模式之外观模式

    目录 一.什么是外观模式 二.外观模式的使用场景 三.外观模式的优缺点 四.外观模式的实现 总结 一.什么是外观模式 定义:为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口. 外观模式组成: Facade:负责子系统的的封装调用 Subsystem Classes:具体的子系统,实现由外观模式Facade对象来调用的具体任务 二.外观模式的使用场景 1.设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式: 2.开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调

  • Java 设计模式之责任链模式及异步责任链详解

    目录 一.定义 二.普通责任链模式 三.异步责任链模式 一.定义 责任链模式(Chain of Responsibility Pattern):避免将一个请求的发送者与接受者耦合在一起,让多个对象都有机会处理请求.将接受请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止. 在很多源码都有涉及,如Mybatis拦截器.Filter- 责任链模式属于行为型模式. 二.普通责任链模式 抽象处理类:AbstractProcessor /** * 抽象处理类 */ public

  • java设计模式(实战)-责任链模式

    目录 一:模式说明 二:项目实战 三:源代码 一:模式说明 模式定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. 责任链模式的重点是在“链”上,由一条链去处理相似的请求在链中决定谁来处理这个请求,并返回相应的结果(取自<设计模式之禅>). 翻译:Client对象调用一个处理者(类)的方法,可能有多个处理者(实现类),但是该对象只需要调用第一个处理者(类)即可,该模式会自动分配谁来处理这个请求:这

  • Java设计模式之职责链模式详解

    目录 前言 一.职责链模式的定义与特点 二.职责链模式的结构 三.职责链模式案例 前言 本文简单介绍了设计模式的一种--职责链模式  一.职责链模式的定义与特点 定义: 为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链:当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止. 比如我们的审批制度,低等级的审批不了的,交给上一级审批,依次类推,直到审批结束. 在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处

  • Java设计模式之单件模式深入讲解

    目录 定义 Java单件模式 经典单件模式的实现 多线程单件模式的实现 急切创建实例 双重检查加锁 Python单件模式 模块实现 new关键字实现 装饰器实现 函数装饰器 类装饰器 定义 单件模式确保一个类只有一个实例,并提供一个全局访问点 Java单件模式 经典单件模式的实现 public class Singleton{ private static Singleton uniqueInstance; // 利用一个静态变量来记录Singleton类的唯一实例 private Single

  • Java设计模式UML之类图精解

    目录 1.UML基本介绍 2.UML类图 2.1 类关系--依赖 2.2 类关系--泛化 2.3 类关系--实现 2.4 类关系--关联 2.5 类关系--聚合 2.6 类关系--组合 1.UML基本介绍 UML--Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果. UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类

  • java 设计模式之适配器模式的详解

    java 设计模式之适配器模式的详解 前言: 适配器模式(Adapter Pattern)又叫做变压器模式,也叫做包装模式.包装模式还包括装饰模式. 在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的. 一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中. UML类图:  具体代码: public class Client { public static void main(String[] args)

  • Java设计模式之命令模式详解

    命令模式 定义:将请求封装成对象,这可以让你使用不同的请求.队列.或者日志来参数化其他对象. 何时使用命令模式?当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式. 在被解耦的两者之间是通过命令对象进行沟通的.命令对象封装了接收者和一个或一组动作. 调用者通过调用命令对象的execute()方法发出请求,这会使接收者的动作被调用. 调用者可以接收命令当作参数,甚至在运行时动态地进行. 优点: 1.降低了系统耦合度. 2.新的命令可以很容易添加到系统中去. 缺点:使用命令模式可能会导致

  • Java设计模式之原型模式详解

    一.前言 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式.在实际应用中,原型模式很少单独出现.经常与其他模式混用,他的原型类Prototype也常用抽象类来替代. 该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.在Java中,复制对象是通过clone()实现的,先创建一个原型类,通过实现Cloneable 接口 public class Prototype implements Cloneable { public

  • Java设计模式之代理模式详解

    一.代理模式 代理模式就是有一个张三,别人都没有办法找到他,只有他的秘书可以找到他.那其他人想和张三交互,只能通过他的秘书来进行转达交互.这个秘书就是代理者,他代理张三. 再看看另一个例子:卖房子 卖房子的步骤: 1.找买家 2.谈价钱 3.签合同 4.和房产局签订一些乱七八糟转让协议 一般卖家只在签合同的时候可能出面一下,其他的1,2,4都由中介去做.那你问这样有什么用呢? 首先,一个中介可以代理多个卖房子的卖家,其次,我们可以在不修改卖家的代码的情况下,给他实现房子加价.打广告等等夹带私货的

  • Java设计模式探究之观察者模式详解

    目录 1.观察者模式是什么 2.如何实现 3.代码实现 1)观察者接口 2)被观察者接口 3)观察者实现 4)被观察者实现 5)测试类 4.延伸拓展 1.观察者模式是什么 顾名思义,有两个对象,观察者和被观察者.当被观察者数据发生变化时,提醒观察者更新数据或状态. 2.如何实现 1)定义两个类,观察者和被观察者. 2)被观察者要维护一个集合,存放观察者对象.并且提供增删方法. 3)被观察者数据发生变化时,要调用观察者的方法,以便通知观察者更新数据或状态. 4)基于面向抽象原则,可以将观察者和被观

  • java设计模式之单例模式的详解及优点

    java设计模式之单例模式 定义:如果一个类始终只能创建一个实例,那么这个类被称为单例类,这种设计模式被称为单例模式. Spring框架里面可以将所有生成的bean对象都设置为单例模式,只需要在配置Bean实例时指定scope="singleton"即可,或者不做配置默认即为单例模式. 我们可以创建一个小的Demo来演示单例模式的实现,只需要保证该类只能创建一个实例,我们可以用权限修饰符private修饰该类的构造器. 提供一个创建该类的接口,该接口只能用static修饰,类里面创建一

  • Java设计模式之单例模式实例详解【懒汉式与饿汉式】

    本文实例讲述了Java设计模式之单例模式.分享给大家供大家参考,具体如下: 单例模式就是产生一个对象实例,供外外部访问. 它的应用场景就是在这个类在全局真资源需要统一访问,否则会造成混乱时,才有必要设计成单例. 懒汉式,就是在使用这个对象时,才去查看这个对象是否创建,如果没创建就马上创建,如果已经创建,就返回这个实例. 饿汉式,在加载这个类的时候就先创建好一个对象实例,等待调用. 两者的优缺点也能猜到,使用懒汉式,在反应速度上肯定要比饿汉式慢. 但是这个对象如果不被调用,那就节省了cpu和内存资

  • JAVA设计模式之访问者模式详解

    在阎宏博士的<JAVA与模式>一书中开头是这样描述访问者(Visitor)模式的: 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变. 分派的概念 变量被声明时的类型叫做变量的静态类型(Static Type),有些人又把静态类型叫做明显类型(Apparent Type):而变量所引用的对象的真实类型又叫做变量的实际类型(Actual Type).比如: 复制代码 代码如下: List lis

随机推荐