最近老大给我设计了一个微信扫码登录的通过工具包流程图,设计过程中使用了模板模式、面向接口编程等设计思路,让我很享受整个过程;下来我就接触了一下Java的设计模式,很是懵懂,听说这也是要靠经验来喂,才能有设计架构的思想,所以先从简单的做起,先了解了解UML中类与类之间的关系:

UML中常见的关系包括:泛化(Generalization)、实现(Realization)、依赖(Dependency)、关联(Association)、聚合(Aggregation)、组合(Composition)六种关系

(1)泛化关系是指子类继承父类、子接口继承父接口的功能,并可以增加新功能的能力,继承是类与类 或 接口与接口最常见的关系,Java中关键字描述:extends

  
(2)实现关系是指类实现接口(一个类可以实现1 ~ n 个接口),重写接口包含所有的抽象方法,Java中关键字描述:implements
  

  
(3)依赖关系是指类与类之间的连接,表示一个类依赖于另外一个类的定义,依赖关系时是单向的。简单理解就是类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。但是类B的变化会影响到类A。举个例子,如某人要过河,则人与船的关系就是依赖,人过河之后,与船的关系就解除了,因此是一种弱的连接。在代码层面,类B作为参数出现在类A在某个方法中;
  在java中,依赖表现为:局部变量,方法中的参数和对静态方法的调用。
  

  
(4)关联关系是指类与类之间的连接,使得一个类知道另外一个类的属性和方法。

  关联可以使用单箭头表示单向关联,使用双箭头表示双向关联,不建议使用双向关联,关联有两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例。

  a)0..1 表示可以有0个或者1个实例

  b)0..* 表示对实例的数目没有限制

  c)1     表示只能有一个实例

  d)1..* 表示至少有一个实例

  关联关系体现的是两个类,或者类与接口之间的强依赖关系,这种关系很强烈,比依赖更强,不是偶然性的,也不是临时性的,而是一种长期性,相对平等的关系,表现在代码层面,被关联的类B以类属性的形式出现在类A中,也可能是关联类A引用了被关联类B的全局变量。
  在Java中,关联关系是使用实例变量来实现。
  

  
(5)聚合是关联关系的特例,是强的关联关系,聚合是整体与个体的关系,即has-a关系,此时整体和部分是可以分离的,他们具有各自的生命周期,部分可以属于多个对象,也可以被多个对象共享;比如计算机和CPU,公司与员工的关系;在代码层面聚合与关联是一致的,只能从语义上来区分。

  a)聚合关系也是使用实例变量来实现的,在java语法上区分不出关联和聚合,关联关系中类出于一个层次(同级关系),而聚合则明显的在两个不同的层次(上下级关系);

  b)A 中拥有一个 B,但 B 脱离于 A 仍然可以独立存活;

  
(6)组合关系也是关联关系的一种特例,体现的是一种 contain-a 关系,比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。如大脑和人类。

  a)体现在代码层面与关联是一致的,使用实例变量来实现,只能从语义来区分;

  b)组合与聚合几乎完全相同,唯一区别就是对于组合,“部分”不能脱离“整体”单独存在,其生命周期应该是一致的;

  c)A 中拥有一个 B,B 脱离 A 后在系统中没有任何存活的意义;

   
(7)总结:
  类与类之间的关联关系要注意强弱,由弱到强次序:依赖 < 关联 < 聚合 < 组合
 
  继续前进!

UML中常见的类关系你了解吗?的更多相关文章

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

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

  2. 详解UML中的6大关系(关联、依赖、聚合、组合、泛化、实现)

      UML中的6大关系相关英文及音标: 依赖关系 dependency --------> 关联关系 association ______> 聚合关系 aggregation ______ ...

  3. UML中的6大关系详细说明

    UML中的6大关系详细说明: 1.关联关系: 含义:类与类之间的连结,关联关系使一个类知道另外一个类的属性和方法:通常含有“知道”,“了解”的含义 体现:在C#中,关联关系是通过成员变量来实现的: 方 ...

  4. UML中的四种关系总结

    UML中的关系主要包含四种:关联关系.依赖关系.泛化关系.实现关系.当中关联关系还包含聚合关系和组合关系. 1. 关联关系(Association) 关联关系式一种结构化的关系,是指一种对象和还有一种 ...

  5. UML总结---UML中的事物和关系

    UML中的事物 名称 说明 图形 类 相同属性方法的集合 接口 类或组件提供的,可以完成特定功能的一组操作的集合 协作 合作的动作 用例 系统的一个功能 节点 代表可计算的资源 活动类 有多个线程的类 ...

  6. 盘点UML中的四种关系

    生活中,我们既是独立的个体,又通过联系形成各种关系,比方说:朋友.恋人.父子,同学--于是乎,出现了神乎其神的六人定律. 那么在UML中又存在什么样的关系呢?以下我们来梳理一下. 关联(Associa ...

  7. JAVA中常见异常类

    1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...

  8. UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)

    UML中类与类,已经类与接口,接口与接口的关系有:泛化(generalization),关联(association),依赖(dependency),实现(realization)这几种.   泛化( ...

  9. cocos2dx中常见的类及类继承关系

    场景:CCScene,继承自CCNode,几乎完全等于CCNode类 CCNode继承自CCObject,CCObject是真正意义上的父类,CCObject又继承自CCCopying类,CCCopy ...

随机推荐

  1. spring boot:配置druid数据库连接池(开启sql防火墙/使用log4j2做异步日志/spring boot 2.3.2)

    一,druid数据库连接池的功能? 1,Druid是阿里巴巴开发的号称为监控而生的数据库连接池 它的优点包括: 可以监控数据库访问性能 SQL执行日志 SQL防火墙 2,druid的官方站: http ...

  2. nfs4使用中的防火墙配置

    一,查看本地centos的版本: [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) ...

  3. python自测100题

    如果你在寻找python工作,那你的面试可能会涉及Python相关的问题. 通过对网络资料的收集整理,本文列出了100道python的面试题以及答案,你可以根据需求阅读测试.如果你看了还是不懂可以加我 ...

  4. 报错 source-1.6 中不支持 diamond运算符

    报错 source-1.6 中不支持 diamond运算符 解决方式 在pom.xml文件中修改 <plugin> <groupId>org.apache.maven.plug ...

  5. 基于Python与命令行人脸识别项目(系列二)

    接着系统一,继续开始我们face_recognition. Python 模块:face_recognition 在Python中,你可以导入face_recognition模块,调用丰富的API接口 ...

  6. B. Petya and Divisors 解析(思維)

    Codeforce 111 B. Petya and Divisors 解析(思維) 今天我們來看看CF111B 題目連結 題目 略,請看原題 前言 看了別人的解答就豁然開朗 @copyright p ...

  7. 【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate

    FROM:http://lazyfoo.net/tutorials/SDL/06_extension_libraries_and_loading_other_image_formats/windows ...

  8. Java学习的第五十五天

    1.例11.1继承学生类 import java.util.Scanner; import java.util.*; public class Cjava { public static void m ...

  9. “wget: 无法解析主机地址”的解决方法

    问题: 1 [root@iZ2zefny2a19ms6azli2pwZ ~]# wget https://download.redis.io/releases/redis-5.0.10.tar.gz ...

  10. Linux 系统编程 学习:00-有关概念

    Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统 ...