Java聚合

1 什么是Java聚合

如果类具有实体引用,则称为聚合。聚集表示HAS-A关系。

例如:Employee对象包含许多信息,例如id,name,emaid等。它还包含一个名为address的对象,该对象包含地址信息,例如省份,城市,地区,邮政编码等,如下所示。

class Employee{  
  int id;  
  String name;  
  Address address;//Address是一个对象
...  
}  

以上情况,Employee包含实体引用Address,因此关系为Employee HAS-A Address。

2 为什么要使用聚合

  • 用于代码可重用性。

3 聚合的示例

在上图中,我们在Circle类中创建了Operation类的引用。

/**
 * 一点教程网 - http://www.yiidian.com
 */
//Java聚合的示例
class Operation{
    int square(int n){
        return n*n;
    }
}

class Circle{
    Operation op;//聚合
    double pi=3.14;

    double area(int radius){
        op=new Operation();
        int rsquare=op.square(radius);//代码的可重用性。
        return pi*rsquare;
    }

    public static void main(String args[]){
        Circle c=new Circle();
        double result=c.area(5);
        System.out.println(result);
    }
}

输出结果为:

78.5

4 什么时候使用聚合

  • 当没有is-a关系时,最好使用聚合实现代码重用。
  • 只有在is-a关系涉及对象的整个生命周期中都保持不变时,才应使用继承。否则,聚合是最佳选择。

5 聚合的实际案例

在下面示例中,雇员具有地址对象,地址对象包含其地址信息,例如省份,城市,地区,邮政编码等。在这种情况下,关系为雇员 HAS-A 地址。

Address.java:

/**
 * 一点教程网: http://www.yiidian.com
 * 地址类
 */
public class Address {
    String province,city,area;

    public Address(String province, String city, String area) {
        this.province = province;
        this.city = city;
        this.area = area;
    }

}  

Emp.java:

/**
 * 一点教程网: http://www.yiidian.com
 * 雇员类
 */
public class Emp {
    int id;
    String name;
    Address address;

    public Emp(int id, String name,Address address) {
        this.id = id;
        this.name = name;
        this.address=address;
    }

    void display(){
        System.out.println(id+" "+name);
        System.out.println(address.province+" "+address.city+" "+address.area);
    }

    public static void main(String[] args) {
        Address address1=new Address("广东","广州","天河区");
        Address address2=new Address("北京","北京","顺义区");

        Emp e=new Emp(111,"张三",address1);
        Emp e2=new Emp(112,"李四",address2);

        e.display();
        e2.display();

    }
}

输出结果为:

111 张三
广东 广州 天河区
112 李四
北京 北京 顺义区

 

推荐好课