저는 쓰고있는 작은 축구 매니저 게임에서 다음과 같은 문제가 있습니다. Person, Player, Coach, Manager 클래스가 있습니다. Person은 다른 클래스의 기본 클래스입니다. 문제는 플레이어가 코치 및/또는 관리자가 될 수도 있다는 것입니다. 더 많은 역할을 추가함으로써 (예 : groundkeeper) 점점 더 복잡해질 것입니다. 그래서 어떻게 효율적으로 구현할 수 있습니까? 그것에 대한 패턴이 없습니까?Java에서 다중 상속 객체를 모델링하는 방법
답변
저는 구현 클래스가 Person을 데이터 멤버로 감싸는 Role 인터페이스를 가졌습니다. (AbstractRole은 여기에 의미가 있습니다.)
상속을 통한 구성, 특히이 경우 상속을 우선합니다.
역할을 사람 유형으로 모델링하지 마십시오. 해당 인물에는 역할 모음이 있어야합니다.
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 - 또 다른 좋은 아이디어입니다. – duffymo
열거 형을 사용하려면 컬렉션이 EnumSet
집합이 아닌 목록은 여러 개의 동일한 역할을 여러 번 허용합니다. ;) –
이것은 제안 일뿐입니다.
질문을 읽을 때 게임 중에 플레이어가 '승격'되거나 '다운 그레이드'될 수 있다는 생각이 들었습니다. 예를 들어 은퇴 한 선수는 '코치'가 될 수 있습니다.
두 번째로 (이미 알아 챘습니다.) 한 사람이 코치와 관리자가 될 수 있다는 사실입니다. 내가 역할의 사람 클래스 -s를 컬렉션을 만들 이유
는 그입니다.
역할는 추상 클래스가 될 수 있습니다 그것은 다음과 같은 서브 클래스있을 수 있습니다
- Player를
- 코치
- 관리자
- 등
당신이 할 수있는 이 열거 형을 가짐
enum Role {
Player, Coach, Manager, GroundsKeeper
}
class Person {
final Set<Role> roles = EnumSet.noneOf(Role.class);
}
이렇게하면 사람은 여러 가지 역할을 가질 수 있습니다.
- 1. 다중 상속
- 2. 다중 상속
- 3. 다중 상속
- 4. 다중 상속
- 5. Java에서 스레딩 : 객체를 잠그는 방법?
- 6. 루비의 다중 상속 유형 클래스 상속
- 7. 다중 상속 템플릿 클래스
- 8. Java에서 인터페이스 구현의 상속
- 9. 엔티티 프레임 워크 : 다중 상속
- 10. 이 관계를 모델링하는 방법?
- 11. QThread와 QWidget (QObject로 다중 상속)을 이용한 다중 상속
- 12. JsDoc 다중 상속 또는 mixins 방법?
- 13. VCL 다중 상속
- 14. php4 다중 레벨 상속
- 15. 다중 클래스 상속
- 16. 템플릿 클래스의 다중 상속
- 17. Extjs 다중 상속?
- 18. Codeigniter 및 다중 상속
- 19. C++에서 다중 상속
- 20. C++ 다중 상속 질문
- 21. C 번호 다중 상속
- 22. 에펠의 다중 상속
- 23. C#의 다중 상속
- 24. 다중 상속 계층
- 25. C#을 다중 상속
- 26. Django를 이용한 다중 상속
- 27. JPA 상속 다중 DiscriminatorValues
- 28. 다중 인터페이스 상속
- 29. wxPython과 다중 상속
- 30. (각 상속 모델은 독특한 방법을 가지고 상속 모델) 장고이 모델링하는 방법
예, 합성 상속. –