对象之间的聚合比例为1:m

时间:2014-02-08 16:56:54

标签: java relationship composition

我有member.objects是画家,木匠和TeamLeads,可以有其他TeamLeads,画家或木匠。有没有办法连接它们,以便我可以获得TeamLeads.team,并且还能够查看谁在TeamLeads.team下工作。我理解如何使用数据库,但想知道组合或聚合是否会处理1:m的关系,如果有一个我可以看到的例子。它是否需要Team.class链接每个人或者它可以由本地引用处理,我只是找不到任何示例。

2 个答案:

答案 0 :(得分:0)

所以听起来你有一些带有这种签名的方法来检索TeamLead列表:

public List<TeamLead> getTeamLeads()

从那里,你想得到每个团队的成员,你的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...
}

其中PersonPainterCarpenterTeamLead的基类 - 还有其他方法可以在没有类层次结构的情况下执行此操作,但我会坚持为了便于解释现在这个。

答案 1 :(得分:0)

正如我所看到的,你可以通过私人收藏来做到这一点,私人收藏可以通过修饰符进行管理,修饰符也可以保留反向关系:

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;
    }
}

由于您没有teamMembers或leader的公共setter,更改leader或teamMembers的唯一方法是使用addTeamMember和removeTeamMember方法,因此您可以通过这些方法保持双向关系。

我希望这可能会有所帮助。