당신은 캐스트가 검사를 실패 할 수 있습니다 의심 그냥 평범한 Bicycle
입니다. 당신은 매개 변수로 Bicycle
소요 MountainBike
의 생성자 생성됩니다 할 수있는 일 :
MountainBike mb = new MountainBike(Bicycle bicycle);
당신은 어떤 이유에 대한 MountainBike
클래스를 수정할 수없는 경우
public MountainBike(Bicycle bicycle) {
// Copy bicycle's properties
}
를 대신 호출 팩토리 메소드를 만들 수도 있습니다.
public class MountainBikeFactory {
public static MountainBike createMountainBike(Bicycle bicycle) {
MountainBike mb = new MountainBike();
// Copy bicycle's properties
return mb;
}
}
:
MountainBike mb = MountainBikeFactory.create(bicycle);
편집 : 당신이 빌더 패턴을 시도 할 수처럼 당신이 질문에 주석으로 게시 된 정보를보고 한 후, 그것은 보인다. 빌더는 모든 속성을 변수로 포함하고 (예, 100+ 변수가 길어질 것임) 파일에서 속성을 발견 할 때 빌더에서 설정합니다. 그런 다음 마지막에 빌더의 build()
메소드를 호출 할 때 어떤 유형의 자전거를 만들고 다형성을 사용하여 속성 그룹 w.r.t를 처리 할 것인지를 결정하십시오. 어느 자전거를 만들었습니까? 예를 들어
는 :
public class BikeBuilder {
private String model;
private String wheelSize;
private String shocks;
private String racingHandleBarType;
// returns "this" so you can chain calls, common in builders, not necessary
public BikeBuilder setModel(String model) {
this.model = model;
return this;
}
// Other setters
public Bike build() {
Bike bike;
// Determine which kind of bike it is and create it
if (shocks != null) {
bike = new MountainBike();
handleMountainBike((MountainBike) bike);
} else if (racingHandleBarType != null) {
bike = new RacingBike();
handleRacingBike((RacingBike) bike);
} else {
bike = new Bike();
}
handleCommonAttributes(bike);
return bike;
}
// All bikes have these attributes
private void handleCommonAttributes(Bike bike) {
bike.setModel(model);
bike.setWheelSize(wheelSize);
}
private void handleMountainBike(MountainBike bike) {
bike.setShocks(shocks);
}
private void handleRacingBike(RacingBike bike) {
bike.setRacingHandleBarType(racingHandleBarType);
}
}
이것은 당신이 즉석에서 자전거를 구축하고 대신 처음의 파일 읽기의 말에 유형을 결정할 수 있습니다. 일종의 컨테이너 역할을합니다. Bike
을 확장하는 여러 유형이있는 경우 해당 유형을 새 방법으로 만들 수 있습니다. 적어도 당신을 시작할 것입니다.
아니요. 작업중인 객체가 * 단지 '자전거'이므로 예외가 발생하는 경우 예외입니다. 작성한 후에는 오브젝트 유형을 변경할 수 없습니다. –
감사합니다. 시도해 보겠습니다. 자전거에서 산악 자전거까지 모든 속성을 설정하는 효율적인 방법이 있습니까? –
MountainBike를 처음부터 만들 수없는 이유가 있습니까? –