package racingcar.model;
import racingcar.common.constant.MessageConstants;
import racingcar.ui.OutputUI;
/**
* RacingCarProxy는 RacingCar의 프록시 역할을 하며, 자동차의 이동을 기록하고 출력하는 기능을 추가합니다.
*/
public class RacingCarProxy extends RacingCar {
private static final String DISTANCE_INDICATOR = "-";
private RacingCarProxy(String name) {
super(name);
}
/**
* RacingCarProxy를 생성하는 팩토리 메소드입니다.
*
* @param name 자동차의 이름입니다.
* @return RacingCarProxy 객체
*/
public static RacingCarProxy create(String name) {
return new RacingCarProxy(name);
}
@Override
public void move() {
super.move(); // 실제 RacingCar를 이동시킵니다.
printRaceRecord(); // 이동 후 기록을 출력합니다.
}
/**
* 자동차의 이동 기록을 출력합니다.
*/
private void printRaceRecord() {
String carName = getName();
String distanceIndicator = getDistanceIndicator();
OutputUI.printResult(MessageConstants.OUTPUT_RACE_RECORD_TEMPLATE, carName, distanceIndicator);
}
/**
* 현재 거리를 기준으로 거리 표시기를 반환합니다.
*
* @return 거리 표시기 문자열
*/
private String getDistanceIndicator() {
int distance = getDistance(); // 상위 클래스에서 현재 거리 가져오기
return DISTANCE_INDICATOR.repeat(distance); // 거리에 따른 표시기 생성
}
}
여기서 Proxy의 기능은 사실 내가 배웠던 거랑 비슷하고 굳이 필요한가 싶긴해.