2010-12-21 7 views
3

저는 쓰고있는 작은 축구 매니저 게임에서 다음과 같은 문제가 있습니다. Person, Player, Coach, Manager 클래스가 있습니다. Person은 다른 클래스의 기본 클래스입니다. 문제는 플레이어가 코치 및/또는 관리자가 될 수도 있다는 것입니다. 더 많은 역할을 추가함으로써 (예 : groundkeeper) 점점 더 복잡해질 것입니다. 그래서 어떻게 효율적으로 구현할 수 있습니까? 그것에 대한 패턴이 없습니까?Java에서 다중 상속 객체를 모델링하는 방법

+0

예, 합성 상속. –

답변

1

저는 구현 클래스가 Person을 데이터 멤버로 감싸는 Role 인터페이스를 가졌습니다. (AbstractRole은 여기에 의미가 있습니다.)

상속을 통한 구성, 특히이 경우 상속을 우선합니다.

9

역할을 사람 유형으로 모델링하지 마십시오. 해당 인물에는 역할 모음이 있어야합니다.

public enum Role { 
    PLAYER, 
    COACH, 
    REF 
} 

public class Player { 
    private final String name; 
    private Collection<Role> roles = new ArrayList<Role>(); 

    public Player(String name) { 
    this.name = name; 
    } 

    public void addRole(Role role) { 
    this.roles.add(role); 
    } 
} 
+1

+1 - 또 다른 좋은 아이디어입니다. – duffymo

+1

열거 형을 사용하려면 컬렉션이 EnumSet 이어야하지만, 예를 들어 사람이 둘 이상의 "코치"역할을 가질 수있는 경우 컬렉션의 요소가 역할이 아니어야합니다. 역할 유형 (역할)과 다른 역할 관련 정보 (사람이 코칭하는 팀의 이름 또는 그와 관련된 참조 정보)를 모두 캡슐화하는 좀 더 구체적이어야합니다. –

+0

집합이 아닌 목록은 여러 개의 동일한 역할을 여러 번 허용합니다. ;) –

0

이것은 제안 일뿐입니다.

질문을 읽을 때 게임 중에 플레이어가 '승격'되거나 '다운 그레이드'될 수 있다는 생각이 들었습니다. 예를 들어 은퇴 한 선수는 '코치'가 될 수 있습니다.

두 번째로 (이미 알아 챘습니다.) 한 사람이 코치와 관리자가 될 수 있다는 사실입니다. 내가 역할의 사람 클래스 -s를 컬렉션을 만들 이유

는 그입니다.

역할는 추상 클래스가 될 수 있습니다 그것은 다음과 같은 서브 클래스있을 수 있습니다

  • Player를
  • 코치
  • 관리자
0

당신이 할 수있는 이 열거 형을 가짐

enum Role { 
    Player, Coach, Manager, GroundsKeeper 
} 

class Person { 
    final Set<Role> roles = EnumSet.noneOf(Role.class); 
} 

이렇게하면 사람은 여러 가지 역할을 가질 수 있습니다.