Java中的关联是什么,为什么需要它?

时间:2020-02-23 14:33:56  来源:igfitidea点击:
  • 例如,一个人只能拥有一本护照。那是一种"一对一"的关系。

  • 如果我们谈论银行与雇员之间的关联,那么银行可以有很多雇员,因此这是一种"一对多"的关系。

  • 同样,每个城市都只存在于一个州中,但是一个州可以有多个城市,这是一种"多对一"的关系。

  • 最后,如果我们谈论教师与学生之间的关联,则可以将多个学生与一个老师关联,并且可以将一个学生与多个老师关联,但是两者可以独立创建或者删除。这是"多对多"关系。

让我们以示例的方式了解关联。

package MyPackage;
import java.util.*; 
class CityClass {
	 
    private String cityName;
 
    public String getCityName() {
        return cityName;
    }
 
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    @Override
    public String toString() {
        return cityName;
    }
}
class State {
	 
    private String stateName;
    
    List<CityClass> citys;
 
    public String getStateName() {
        return stateName;
    }
 
    public void setStateName(String stateName) {
        this.stateName = stateName;
    }
    public List<CityClass> getCities() {
        return citys;
    }
    public void setState(List<CityClass> citys) {
        this.citys = citys;
    }
    
}
public class AssociationExample {
	  public static void main(String[] args) {
	        State state = new State();
	        state.setStateName("California");
	        
	        
	       CityClass city = new CityClass();
	        city.setCityName("Los Angeles");
	        CityClass city2 = new CityClass();
	        city2.setCityName("San Diago");
	        
	        List<CityClass> empList = new ArrayList<CityClass>();
	        empList.add(city);
	        empList.add(city2);
	        
	        
	        state.setState(empList);
	        
	        
	        System.out.println(state.getCities()+" are cities in the state "+
	                state.getStateName());
	    }
	 
}

如我们所见,在此示例程序中,有两个类,即州和城市。
这两个单独的类通过其对象关联。
此外,每个城市仅存在于一个州中,但是一个州可以有许多城市,因此称为"多对一"关系。
重要的是,Java中的关联具有两种特殊形式。
让我们检查一下。

两种形式的结社

组合和聚合是两种特殊的关联形式。
让我们在一个示例的帮助下检查一下它们。

组合

这是一种"属于"类型的关联。
它仅表示一个对象是一个逻辑上较大的结构,其中包含另一个对象。
换句话说,它是较大对象的一部分或者成员。
替代地,它通常被称为"具有关系"(与"是"关系相反,后者是继承)。

例如,建筑物有一个房间,换句话说,房间属于建筑物。
合成是一种强烈的"具有"关系,因为对象的生命周期是紧密联系在一起的。
这意味着,如果我们销毁所有者对象,它的成员也将被销毁。
例如,如果建筑物被破坏,则在前面的示例中,房间也将被破坏。
但是,请注意,这并不意味着包含对象的任何部分都不可能存在。
例如,如果我们拆除建筑物内的所有房间,建筑物将仍然存在。

聚合

聚合也是一种" has-a"关系,但是与组合的区别在于,对象的生命周期不受限制。
这两个条目都可以单独生存,这意味着结束一个实体不会影响另一实体。
它们可以彼此独立存在。
因此,它通常被称为周关联。

让我们以一个球员和一个团队为例。
即使团队不再存在,作为团队一部分的球员也可以存在。
我们需要聚合的主要原因是为了保持代码的可重用性。