Java 对象之间具有1:m的聚合

Java 对象之间具有1:m的聚合,java,relationship,composition,Java,Relationship,Composition,我有member.objects,它们是画家、木匠和队长,可以有其他队长、画家或木匠在它们下面。有没有办法将他们联系起来,这样我就可以获得TeamLeads.team,并且能够看到谁在他们的TeamLeads.team下工作。我了解如何使用数据库,但想看看组合或聚合是否可以处理1:m关系,以及是否有我可以看到的示例。它可能需要一个Team.class来链接每个人,或者可以由本地引用来处理,但我找不到任何示例。因此,听起来您有一个具有此类签名的方法来检索TeamLead列表: public Lis

我有member.objects,它们是画家、木匠和队长,可以有其他队长、画家或木匠在它们下面。有没有办法将他们联系起来,这样我就可以获得TeamLeads.team,并且能够看到谁在他们的TeamLeads.team下工作。我了解如何使用数据库,但想看看组合或聚合是否可以处理1:m关系,以及是否有我可以看到的示例。它可能需要一个Team.class来链接每个人,或者可以由本地引用来处理,但我找不到任何示例。

因此,听起来您有一个具有此类签名的方法来检索TeamLead列表:

public List<TeamLead> getTeamLeads()

其中,
Person
Painter
Carpenter
TeamLead
的基类-在没有类层次结构的情况下,还有其他方法可以做到这一点,但为了更简单的解释,我现在还是坚持这一点。

在我看来,你可以通过一个私人集合来实现这一点,这个集合可以由修饰符管理,修饰符也可以维护反向关系,比如:

public class TeamLead {
    private final List<Person> team = new ArrayList<Person> ();

    // You can of course populate this list however is best for your code
    public void addTeamMember(Person p) {
        team.add(p);
    }

    public List<Person> getTeam() {
        return team;
    }

    // more code...
}
public class TeamMember {
    private TeamMember leader;
    private Set<TeamMember> teamMembers= new HashSet<TeamMember>();
    public Set<TeamMember> getTeamMembers(){
        return new HashSet<TeamMember>(teamMembers);
    }
    public void addTeamMember(TeamMember member){
        if(member.leader!=null){
            member.leader.removeTeamMember(member);
        }
        member.leader=this;
        teamMembers.add(member);
    }
    public void removeTeamMember(TeamMember member){
        member.leader=null;
        teamMembers.remove(member);
    }
    public TeamMember getLeader(){
        return leader;
    }
}
公共类团队成员{
私人团队成员领导;
private Set teamMembers=new HashSet();
公共集getTeamMembers(){
返回新的哈希集(团队成员);
}
public void addTeamMember(团队成员){
if(member.leader!=null){
成员.领导者.移除团队成员(成员);
}
member.leader=this;
团队成员。添加(成员);
}
public void removeTeamMember(团队成员){
member.leader=null;
团队成员。删除(成员);
}
公共团队成员getLeader(){
返回领导;
}
}
由于您没有团队成员或领导者的公共设置器,因此更改领导者或团队成员的唯一方法是使用addTeamMember和removeTeamMember方法,这样您就拥有了由这些方法控制的双向关系

我希望这能有所帮助