使用Java语言编写设计模式-2.类与类之间的六种关系

lingwh原创2022年9月7日大约 7 分钟约 2002 字

2.类与类之间的六种关系

2.1.章节内容概述

本章节涉及主要内容有:
 2.1.章节内容概述
 2.2.章节内容大纲
 2.3.依赖关系
 2.4.关联关系
 2.5.聚合关系
 2.6.组合关系
 2.7.泛化关系
 2.8.实现关系
 2.9.六种关系耦合度强弱
具体每个小节中包含的内容可使通过下面的章节内容大纲进行查看。

2.2.章节内容大纲

2.3.依赖关系

2.3.1.依赖关系概述

依赖关系(Dependence),只要是在类中用到了对方,那么它们之间就存在依赖关系。如果没有对方,无法通过编译。

在代码中表现为
a.类中用到了对方
b.是类的成员属性
c.是方法的返回类型
d.是方法接收的参数类型
e.方法中使用到

2.3.2.UML箭头及指向

带箭头的虚线,指向被使用者

2.3.3.依赖关系类图

2.3.4.依赖关系代码

Department.java
package com.dragonsoft.designpattern.basic.classrelation.dependence;

public class Department {
}

IDCard.java
package com.dragonsoft.designpattern.basic.classrelation.dependence;

public class IDCard {
}

Person.java
package com.dragonsoft.designpattern.basic.classrelation.dependence;

public class Person {
}

PersonDao.java
package com.dragonsoft.designpattern.basic.classrelation.dependence;

public class PersonDao {
}

PersonServiceBean.java
package com.dragonsoft.designpattern.basic.classrelation.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();
    }
}

2.4.关联关系

2.4.1.关联关系概述

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

2.4.2.UML箭头及指向

带普通箭头的实线,拥有者指向被拥有者

2.4.3.关联关系类图

单向关联关系
双向关联关系

2.4.4.关联关系代码

单向关联关系
Person.java
package com.dragonsoft.designpattern.basic.classrelation.association.singleone2one;
//一个人只有一个身份证,一个身份证也只能对应一个人;所以身份证跟人是一对一关系
public class Person {
    private IDCard card;
}

IDCard.java
package com.dragonsoft.designpattern.basic.classrelation.association.singleone2one;
//若果代码是这样写的话,就是单向一对一的关系。因为Person中有IDCard成员变量,而中IDCard没有Person成员变量
public class IDCard {
}

双向关联关系
Person.java
package com.dragonsoft.designpattern.basic.classrelation.association.doubleone2one;

//因为PersonIDCard中有成员变量,而中IDCard也有Person成员变量,所以这是双向一对一关系
public class Person {
    private IDCard card;
}

IDCard.java
package com.dragonsoft.designpattern.basic.classrelation.association.doubleone2one;
//因为Person中有IDCard成员变量,而中IDCard也有Person成员变量,所以这是双向一对一关系
public class IDCard {
    private Person person;
}

2.5.聚合关系

2.5.1.聚合关系概述

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

2.5.2.UML箭头及指向

带空心菱形的实心线,菱形指向整体.

2.5.3.聚合关系类图

2.5.4.聚合关系代码

Moniter.java
package com.dragonsoft.designpattern.basic.classrelation.aggregation;

public class Moniter {
}

Mouse.java
package com.dragonsoft.designpattern.basic.classrelation.aggregation;

public class Mouse {
}

Computer.java
package com.dragonsoft.designpattern.basic.classrelation.aggregation;

public class Computer {
    //显示器可以和Computer分离
    private Moniter moniter;
    //鼠标可以和Computer分离
    private Mouse mouse;

    public Moniter getMoniter() {
        return moniter;
    }

    public void setMoniter(Moniter moniter) {
        this.moniter = moniter;
    }

    public Mouse getMouse() {
        return mouse;
    }

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

2.6.组合关系

2.6.1.组合关系概述

组合关系(Composite))表示的是整体和部分的关系,整体与部分不能分开。组合关系是关联关系的一种特例。比如说B类里面用到了一个A类,且这个A类是通过new创建的,也就是说当B类被初始化的时候A类也被初始化了。(耦合度比聚合高)

2.6.2.UML箭头及指向

带实心菱形的实线,菱形指向整体

2.6.3.组合关系类图

2.6.4.组合关系代码

Head.java
package com.dragonsoft.designpattern.basic.classrelation.composition;

public class Head {
}

Leg.java
package com.dragonsoft.designpattern.basic.classrelation.composition;

public class Leg {
}

Person.java
package com.dragonsoft.designpattern.basic.classrelation.composition;

public class Person {
    //组合关系,Person和Head是无法分开的
    private Head head = new Head();
    //组合关系,Person和Leg是无法分开的
    private Leg leg = new Leg();
}

2.7.泛化关系

2.7.1.泛化关系概述

泛化关系(Generalization),泛化关系实际上就是继承关系,它是依赖关系的特例。如果A类继承了B类,我们就说A和B存在泛化关系。

2.7.2.UML箭头及指向

带三角箭头的实线,子类指向父类

2.7.3.泛化关系类图

2.7.4.泛化关系代码

DaoSupport.java
package com.dragonsoft.designpattern.basic.classrelation.generalization;

public abstract class DaoSupport {
    public void save(Object object){}
    public void delete(Object object){}
}

PersonServiceBean.java
package com.dragonsoft.designpattern.basic.classrelation.generalization;

public class PersonServiceBean extends DaoSupport{
}

2.8.实现关系

2.8.1.实现关系概述

实现关系(Realization),比如某个类实现了一个接口。它也是依赖关系的特例。

2.8.2.UML箭头及指向

带三角箭头的虚线,箭头指向接口

2.8.3.实现关系类图

2.8.4.实现关系代码

PersonService.java
package com.dragonsoft.designpattern.basic.classrelation.realization;

public interface PersonService {
    public void delete(Integer id);
}

PersonServiceBean.java
package com.dragonsoft.designpattern.basic.classrelation.realization;

public class PersonServiceBean implements PersonService{
    @Override
    public void delete(Integer id) {

    }
}

2.9.六种关系耦合度强弱

泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
上次编辑于: 2022/9/10 01:42:04
贡献者: lingwh
评论