在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。

1. 依赖(Dependence) 

依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义 比较晦涩难懂,但在java中的表现还是比较直观的:类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。类上面的 图例中:People类依赖于Book类和Food类,Book类和Food类是作为类中方法的参数形式出现在People类中的。

代码样例:

public class People{ //Book作为read方法的形参 public void read(Book book){ System.out.println(“读的书是”+book.getName()); } }
1
2
3
4
5
6

public class People{
    //Book作为read方法的形参
     public void read(Book book){
        System.out.println(“读的书是”+book.getName());
    }
}

2.关联(Association)

单向关联:

双向关联:

对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。关联关系分为单向关联和双向关 联。在java中,单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也 使用了类A作为成员变量。

代码样例:

public class Son{ //关联关系中作为成员变量的类一般会在类中赋值 Father father = new Father(); public void getGift(){ System.out.println(“从”+father.getName()+”获得礼物”); } } public class Father{ Son son = new Son(); public void giveGift(){ System.out.println(“送给”+son.getName()+“礼物”); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14

public class Son{
   //关联关系中作为成员变量的类一般会在类中赋值
    Father father = new Father();
    public void getGift(){
        System.out.println(“从”+father.getName()+”获得礼物”);
    }
}
public class Father{
    Son son = new Son();
    public void giveGift(){
        System.out.println(“送给”+son.getName()+“礼物”);
    }
}

3.聚合(Aggregation)

聚合关系是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。

代码样例:

public class People{ Car car; House house; //聚合关系中作为成员变量的类一般使用set方法赋值 public void setCar(Car car){ This.car = car; } public void setHouse(House house){ This.house = house; } public void driver(){ System.out.println(“车的型号:”+car.getType()); } public void sleep(){ System.out.println(“我在房子里睡觉:”+house.getAddress()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

public class People{
    Car car;
    House house;
    //聚合关系中作为成员变量的类一般使用set方法赋值
     public void setCar(Car car){
        This.car = car;
    }
    public void setHouse(House house){
        This.house = house;
    }
    public void driver(){
        System.out.println(“车的型号:”+car.getType());
    }
    public void sleep(){
        System.out.println(“我在房子里睡觉:”+house.getAddress());
    }
}

4.组合(Composition)

相比于聚合,组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死 的;并且“部分”单独存在时没有任何意义。在下图的例子中,People与Soul、Body之间是组合关系,当人的生命周期开始时,必须同时有灵魂和肉 体;当人的生命周期结束时,灵魂肉体随之消亡;无论是灵魂还是肉体,都不能单独存在,他们必须作为人的组成部分存在。

代码样例:

Public class People{ Soul soul; Body body; //组合关系中的成员变量一般会在构造方法中赋值 Public People(Soul soul, Body body){ This.soul = soul; This.body = body; } Public void study(){ System.out.println(“学习要用灵魂”+soul.getName()); } Public void eat(){ System.out.println(“吃饭用身体:”+body.getName()); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Public class People{
    Soul soul;
    Body body;
    //组合关系中的成员变量一般会在构造方法中赋值
     Public People(Soul soul, Body body){
        This.soul = soul;
        This.body = body;
    }
    Public void study(){
        System.out.println(“学习要用灵魂”+soul.getName());
    }
    Public void eat(){
        System.out.println(“吃饭用身体:”+body.getName());
    }
}

5.继承(Generalization)

继承表示类与类(或者接口与接口)之间的父子关系。在java中,用关键字extends表示继承关系。UML图例中,继承关系用实线+空心箭头表示,箭头指向父类。

6.实现(Implementation)

表示一个类实现一个或多个接口的方法。接口定义好操作的集合,由实现类去完成接口的具体操作。在java中使用implements表示。UML图例中,实现关系用虚线+空心箭头表示,箭头指向接口。

在java中继承使用extends关键字,实现使用implements关键字,很直观。

来源:http://cricode.com/1405.html

转载于:https://www.cnblogs.com/yuwensong/p/3829436.html

设计模式中类之间的关系相关推荐

  1. 转:UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    转:UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 原文:https://www.cnblogs.com/firstcsharp/p/5327659.html 类与类图 1) 类(Clas ...

  2. UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什 ...

  3. UML类图中类之间的关系,聚合,组合,依赖总结

    下面我就根据下面这个图来讲解一下UML类图. 类图 首先,看动物那个矩形框,他就表示为一个类(Class).类图分为三层: 第一层显示类的名称 如果是抽象类,就用斜体表示 第二层显示类的特性,通常是字 ...

  4. ULM图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    在UML中,类使用包含类名.属性和操作且带有分隔线的长方形来表示,如定义一个Employee类,它包含属性name.age和email,以及操作modifyInfo() public class Em ...

  5. Python中类之间的关系

    1.子类和父类 子类和父类主要描述的是类之间的继承关系,即所属关系.继承 的类可在被继承的类的基础上添加格外的参数和行为,新类称为子类,扩展类:被继承的类称为基类.父类或者超类. 使用方法: ##基本 ...

  6. 面向对象中类之间的关系详细解析

    在软件系统中,类不是孤立存在的,类与类之间的存在相互的关系.记得上软件工程时,老师讲到两个范型:传统方法学(结构化方法学)和面向对象方法学(将数据和行为封装在一起). 1.关联关系 1)双向关联 2) ...

  7. UML中类之间的几种关系

    类之间可能存在以下几种关系:关联(association).依赖(dependency).聚合(Aggregation,也有的称聚集).组合(Composition).泛化(generalizatio ...

  8. 构架、框架、设计模式之间的关系简述

    一.软件体系结构和框架的定义 软件体系结构的英文单词是"architecture". Architecture的基本词义是建筑.建筑学.建筑风格. 软件体系结构虽然根植于软件工程, ...

  9. 浅谈UML类图中类之间的5种关系

    什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...

最新文章

  1. WAMP安装提示缺少 msvcr100.dll文件解决方法
  2. android动画送礼物,Android仿直播类app赠送礼物功能
  3. 【FFMPEG中PTS与DTS统一转换为毫秒】
  4. 小程序转h5之后 vant文件查找失败:_你还在使用原生开发小程序吗
  5. Oracle浅谈第六回
  6. linux touch
  7. 移动端前端月历日历_前端基础:必须要知道的移动端适配(2)——分辨率
  8. C语言基础学习教程之数据类型
  9. shell 日期格式化输出
  10. 蚂蚁链ACCA认证试题
  11. 最新kali之hping3
  12. Spring和SpringBoot学习
  13. 每个人都可以做到:月入30000的秘籍!
  14. 【bzoj2563】阿狸和桃子的游戏
  15. 微分方程求通解推导-----专升本
  16. 制动电阻器的工作原理及应用特点
  17. CreateWindow 与CreateWindowEx
  18. framework层的event_log分析
  19. ytu1904——寄居蟹与海葵
  20. 欧美市场独立站选品技巧

热门文章

  1. 性能监控—spotlight监控mysql性能
  2. Java中的Runtime类详解
  3. Dockerfile文件创建centos:7,配置JDK8的环境变量,与运行springboot的jar包,的镜像
  4. java中四种线程池及poolSize、corePoolSize、maximumPoolSize
  5. WPF控件自定义样式(FasControls)
  6. 圆周率前100位记忆(房屋地点桩法)
  7. C'mon C'mon-Von Bondies
  8. python基础-元组
  9. Linux 下C++编写
  10. FreeMarker模板文件的组成(2)