There are five types of relationships between classes:
1. Dependency
One-way , which means that a class depends on the definition of another class, and changes in one class will affect the other class, which is a " use a " relationship
If A depends on B, then B behaves as A's local variables, method parameters, static method calls, etc.
- publicclass Person {
- publicvoid doSomething(){
- Card card = new Card(); //local variable
- ....
- }
- }
- publicclass Person {
- public void doSomething(Card card){ //Method parameters
- ....
- }
- }
- publicclass Person {
- publicvoid doSomething(){
- int id = Card.getId(); // static method call
- ...
- }
- }
2. Association
One-way or two-way (usually we need to avoid using two-way association relationship), is a " has a " relationship, if A is unidirectionally related to B, then it can be said that A has a B, usually expressed as a global variable
- publicclass Person {
- public Phone phone;
- public void setPhone(Phone phone){
- this.phone = phone;
- }
- public Phone getPhone(){
- return phone;
- }
- }
3,聚合关系(Aggregation)
单向,关联关系的一种,与关联关系之间的区别是语义上的,关联的两个对象通常是平等的,聚合则一般不平等,有一种整体和局部的感觉,实现上区别不大
Class由Student组成,其生命周期不同,整体不存在了,部分依然存在,当前Team解散了,人还在,还可以加入别的组
- public class Team {
- public Person person;
- public Team(Person person){
- this.person = person;
- }
- }
4,组合关系(Composition)
单向,是一种强依赖的特殊聚合关系
Head,Body,Arm和Leg组合成People,其生命周期相同,如果整体不存在了,部分也将消亡
- public class Person {
- public Head head;
- public Body body;
- public Arm arm;
- public Leg leg;
- public Person(){
- head = new Head();
- body = new Body();
- arm = new Arm();
- leg = new Leg();
- }
- }
5. Inheritance
A class implements an interface, a class inherits an abstract class, and a class inherits from a parent class belongs to this relationship
It can be divided into finer points:
Realization: A class implementing an interface belongs to this relationship
Generalization: that is, the " is a " relationship, the class inherits the abstract class, and the class inherits the parent class belongs to this relationship