2014-02-08 2 views
0

У меня есть элементы.объектов, которые являются художниками, плотниками и TeamLeads, которые могут иметь под ними другие TeamLeads, художники или плотники. Есть ли способ подключить их, чтобы я мог getTeamLeads.team, а также иметь возможность видеть, кто работает под их TeamLeads.team. Я понимаю, как это сделать с базой данных, но хотел бы посмотреть, будет ли состав или агрегация обрабатывать отношения 1: m, и если есть пример где-то, что я мог видеть. Требуется ли, возможно, Team.class, чтобы связать всех или может быть обработано локальными ссылками, и я просто не могу найти никаких примеров.Агрегация с 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 или лидера Единственного способ изменить лидера или членов команды с помощью методов addTeamMember и removeTeamMember, чтобы у вас были двунаправленные отношения, поддерживаемые этими методами.

Желаю этого.

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

Где Person является базовым классом для Painter, Carpenter и TeamLead - есть и другие способы сделать это без иерархии классов, но я буду придерживаться т o это для более простого объяснения.

Смежные вопросы