聚合是一种特殊的关联形式。
它是两个类之间的关系,如关联,但它是一个方向关联,这意味着它严格地是单向关联。
它代表了一种HAS-A关系。
Java中的聚合示例
例如,考虑两个类Studentclass和Addressclass。
每个学生都有一个地址,所以学生和地址之间的关系是一个Has-A关系。
但是如果你认为它的反之亦然,那就没有任何意义,因为Address它不需要有Student必要。
让我们在java程序中编写这个例子:
class Address
{
int streetNum;
String city;
String state;
String country;
Address(int street, String c, String st, String coun)
{
this.streetNum=street;
this.city =c;
this.state = st;
this.country = coun;
}
}
class StudentClass
{
int rollNum;
String studentName;
//和Address类创建一个 HAS-A 关系
Address studentAddr;
StudentClass(int roll, String name, Address addr){
this.rollNum=roll;
this.studentName=name;
this.studentAddr = addr;
}
public static void main(String args[]){
Address ad = new Address(55, "Agra", "UP", "India");
StudentClass obj = new StudentClass(123, "Chaitanya", ad);
System.out.println(obj.rollNum);
System.out.println(obj.studentName);
System.out.println(obj.studentAddr.streetNum);
System.out.println(obj.studentAddr.city);
System.out.println(obj.studentAddr.state);
System.out.println(obj.studentAddr.country);
}
}
程序输出:
123
Chaitanya
55
Agra
UP
India
上面的示例显示了Student和Address类之间的聚合。
您可以看到在Student类中我已经声明了Address类型的属性来获取学生地址。
它是Java中聚合的典型示例。
为什么我们需要聚合?
维护代码的可重用性。
要理解这一点,再次使用相同的示例。
假设还有另外两个类College,Staff以及上面两个类Student和Address。
为了保持Student的地址,College地址和Staff的地址,我们不需要一次又一次地使用相同的代码。
我们只需要在定义每个类时使用Address类的引用,如:
Student Has-A Address (Has-a relationship between student and address)
College Has-A Address (Has-a relationship between college and address)
Staff Has-A Address (Has-a relationship between staff and address)
因此,我们可以通过使用聚合关系来提高代码的可重用性。
所以,如果我必须在代码中写这个,我会这样做:
class Address
{
int streetNum;
String city;
String state;
String country;
Address(int street, String c, String st, String coun)
{
this.streetNum=street;
this.city =c;
this.state = st;
this.country = coun;
}
}
class StudentClass
{
int rollNum;
String studentName;
//Creating HAS-A relationship with Address class
Address studentAddr;
StudentClass(int roll, String name, Address addr){
this.rollNum=roll;
this.studentName=name;
this.studentAddr = addr;
}
...
}
class College
{
String collegeName;
//Creating HAS-A relationship with Address class
Address collegeAddr;
College(String name, Address addr){
this.collegeName = name;
this.collegeAddr = addr;
}
...
}
class Staff
{
String employeeName;
//Creating HAS-A relationship with Address class
Address employeeAddr;
Staff(String name, Address addr){
this.employeeName = name;
this.employeeAddr = addr;
}
...
}
正如您所看到的,我们没有在三个类中的任何一个中编写Address代码,我们只是使用Address类创建了HAS-A关系以使用Address代码。
上面代码中的点点(…)部分可以用public static void main方法替换,与第一个例子中看到的类似。
原文地址:
https://beginnersbook.com/2013/05/aggregation/