구현중인 Carrier 클래스의 클래스 계층 구조를 설계하는 방법을 알아 내려고하고 있습니다.Java에서 다중 상속없이 클래스 계층 구조 설계
현재 저는 기본 기본 클래스 Carrier를 보유하고 있습니다.
타이밍 및 도메인 관련 정보로 Carrier를 확장하는 다른 추상 클래스 TimedCarrier (TC)가 있습니다. Concrete 클래스는 Carrier와 TimedCarrier에서 확장됩니다.
사용자는 진행 모니터가 필요하므로 Carrier에서 확장 된 추상 클래스 MonitoredCarrier (MC)를 만듭니다. 구체적인 클래스는 모니터링 된 캐리어에서 확장됩니다.
사용자 요구 사항이 변경 될 때까지 잠시 동안 제대로 작동합니다. 이제 MonitoredTimedCarrier가 필요합니다. 분명히 TC와 MC 모두를 하위 클래스로 분류 할 수는 없습니다. 내가 인터페이스로 MC를 구현 생각 해요 :
class TimedCarrier implements IMonitored
class Carrier implements IMonitored
(즉,이 도메인의 맥락에서 나에게 더 의미가 있기 때문에, 나는 그들이 초과하고 있는지 여부 캐리어를 모니터링 할 수 있어야합니다)하지만, MC는 풍부한 구현 클래스이며, 모든 메소드를 MC에서 확장하는 데 사용되는 클래스에 복사하여 붙여 넣어야합니다. 나는 코드를 복제하고 싶지 않다.
어떻게하면이 문제를 해결할 수 있습니까? 감사.
[편집]
TimedCarrier 멤버 변수 게터/세터 방법 무리 캐리어를 연장한다. MonitoredCarrier는 멤버 변수, getter/setter 메서드 및 모니터와 함께 작동하는 여러 메서드를 사용하여 Carrier를 확장합니다.
class TimedCarrier extends Carrier {
int var1..
int var2..
public void setVar1(int var1) {...}
public int getVar1() {...}
....
}
class MonitoredCarrier extends Carrier {
int var1..
int var2..
public void setVar1(int var1) {...}
public int getVar1() {...}
....
public void monitorSomething() {...}
public void monitorOtherSomething() {...}
}
나는 동의해야한다. 많은 경우 컴포지션이 상속보다 우선합니다. – gpampara