类之间的六大关系
有些朋友可能和我一样,写了不少的代码,很少去思考,类之间的关系有哪些呢?今天学习后一并总结分析。
- 依赖
我们说类中用到了对方,那么他们之间就存在依赖关系。
举例:
public class PersonServiceBean {
private PersonDao personDao;//
类
public void save(Person person){}
public IDCard getIDCard(Integer personid){}
public void modify(){
Department department = new Department();
}
}
public class PersonDao{}
public class IDCard{}
public class Person{}
public class Department{}
如代码中,PersonServiceBean就依赖PersonDao、IDCard、Person、Department四个类。
一个类用到另一个类一般有如下四种情况:
- 是类的成员属性,比如PersonDao;
- 是方法的返回类型,比如IDCard;
- 是方法接收的参数类型,比如Person;
- 是方法中的局部变量,比如Department。
- 泛化
泛化关系实际上就是继承关系。如果A类继承了B类,我们就说A和B存在泛化关系。
举例:
public abstract class DaoSupport{
public void save(Object entity){
}
public void delete(Object id){
}
}
public class PersonServiceBean extends Daosupport{
}
- 实现
实现关系,实际上就是类和接口之间的关系。如果A类实现了接口B,我们就说A和B存在实现关系。
举例:
public interface PersonService {
public void delete(Interger id);
}
public class PersonServiceBean implements PersonService {
public void delete(Interger id){}
}
- 关联
关联关系,实际上就是类与类之间的关系,关联具有导航性,即双向关系或者单项关系;
关系具有多重性:如“1”(表示有且仅有一个),“0...”(表示0个或者多个), “0,1”(表示0个或者一个),“n...m”(表示n到 m个都可以),“m...*”(表示至少m 个)。关系的理解,可以类比数据库中表的关系,有1对1、1对多、多对1、多对多。
举例:一个老师可以有多个学生,一个学生可以有多个老师,这就是典型的多对多关系。
单向一对一关系
public class Person {
private IDCard card;
}
public class IDCard{}
双向一对一关系
public class Person {
private IDCard card;
}
public class IDCard{
private Person person
}
- 聚合
聚合关系(
Aggregation
)表示的是
整体和部分
的关系,
整体与部分可以分开
。
聚
合关系是关联关系的特例
,所以他具有关联的导航性与多重性。
如:一台电脑由键盘
(keyboard)
、显示器
(monitor)
,鼠标等组成;组成电脑的各个
配件是可以从电脑上分离出来的,如下图
![](https://i-blog.csdnimg.cn/blog_migrate/b2bd663ae9230a5732e23cafe5fc48be.png)
- 组合
组合关系:也是整体与部分的关系,但是
整体与部分不可以分开
。
如聚合关系中电脑的鼠标的关系是聚合关系,如果是一体机,则关系升级为组合关系,
![](https://i-blog.csdnimg.cn/blog_migrate/3d52cc631e928c2e7a4227c0f8601e12.png)
再看一个案例:在程序中我们定义实体:
Person
与
IDCard
、
Head,
那么
Head
和
Person
就是 组合,
IDCard
和
Person
就是聚合。
举例:
public class Person{
private IDCard card;
private Head head = new Head();
}
public class IDCard{}
public class Head{}