2011-10-09 3 views
1

운전 시뮬레이션 프로그램을 작성하려고하는데 디자인에 대한 도움이 필요합니다. 나는 현재 Vehicle과 포유류를 포함하고있는 RoadObjects라는 인터페이스를 가지고있다. 트럭, 세단, 세미와 같은 다른 종류의 자동차를 구현해야합니다. 공통점과 고유 한 방법이 있습니다. 나중에, 나는 다른 종류의 차량과 포유 동물을 추가 할 것이다. 나는 상속을 사용하고 싶지 않고 공개 원칙 및 공장과 같은 디자인 원칙 및 패턴에 따라이 작업을 수행하려고합니다.Java에서 클래스 구현

RoadObject interface 

Vehicle extends RoadObject 

Mammal extends RoadObject 

SedanImpl implements Vehicle 

TruckImpl implements Vehicle 

People implements Mammal 

...

...

또는 그냥 차량과 사람들 인터페이스가 안되며,이 작업을 수행 : 이제 내 질문에,이처럼 설계해야한다?

RoadObject interface 

SedanImpl implements RoadObject 

TruckImpl implements RoadObject 

People implements RoadObject 

새로운 질문 : 나는 예를 들어 차량의 종류를 선택하기 위해, 공장 패턴을 사용하고 싶습니다. 그래서 나는 다음과 같을 수 있도록 VechicleImpl 및 VechicleImplFactory합니다

RoadObject interface 

Vehicle extends RoadObject 

VehicleImpl implements Vehicle 

Mammal extends RoadObject 

SedanImpl implements Vehicle 

TruckImpl implements Vehicle 

People implements Mammal 

나쁜 디자인의이 종류인가? VehicleImpl에는 SedanImpl, TruckImpl 등의 중복 메소드가 많이 있기 때문에 createVehicle이라는 팩토리를 원한다면 어디에서해야합니까? 합리적인

+0

는 Sedan'가에 필요하지 않을 수도 Truck'와''에 대한 별도의 클래스를 모델링 그래서'Truck'과'Sedan'에 필요한 정보를'VehicleImpl'에 매핑 할 수 있다면 하나의'VehicleImpl'을 갖는 것이 모든 요구 사항을 충족시킬 수 있습니다. – home

+0

@ home 그러나 트럭과 세단에 유일한 방법의 문제는 무엇입니까 – Dan

+0

정말로, 말해주세요 :-) – home

답변

0

두 가지 방법 모두 유효합니다. 차량에 대한 추상화가 필요한지 여부는 요구 사항에 따라 다릅니다.

public interface Vehcile extends RoadObject 
    getTires() 
    getEngine() 

자바에서이 태그와 같은 일반적인 abstract 클래스뿐만 아니라 유용 할 수 있습니다 : : 그래서

public abstract class AbstractVehicle implements Vehicle { 
    private Integer tires = 4; 

    public Integer getTires() { return this.tires; } 

    /* ... */ 
} 

SedanImplTruckImpl 등 호문하는 차량에 공통 있지만 일부 기능/동물을 공유 할 수 있습니다 TruckImplAbstractVehicle에서 상속 할 수 있습니다

public class TruckImpl extends AbstractVehicle { 
    /* ... */ 
} 
0

뭔가 :

- public interface IRoadObject 

- public class People implements IRoadObject 

- public class Vehicle 

- public class Truck extends Vehicle implements IRoadObject 

- public class Sedan extends Vehicle implements IRoadObject 

그러나 여전히 요구 사항에 따라입니다. W/O 명확한 요구 사항은 충분히 간단합니다.

0

나는 차량 & 사람들이 좋은 생각이라고 생각합니다. 나는 이것을 위해 추상적 인 클래스를 사용할 것이다.

행동에 대해서도 생각해보십시오. 스쿨 버스는 오토바이와는 다른 행동을하며 인터페이스로이를 구현할 수 있습니다.

좀 더 많은 아이디어가 필요하시면 around here을보십시오.