URL을 만드는 데 사용되는 제네릭 유형을 입력으로 사용하는 인터페이스 지정 메소드가 있습니다.Void를 선택적 인수로 사용하는 것이 더 나은 대안
interface UrlGenerator<T> {
String prepareUrl(T input);
}
매개 변수가 필요없는 구현이 하나 있습니다. 그것은 제네릭 형식 T.에 대한 무효 사용
class StaticUrlGenerator implements UrlGenerator<Void> {
private final String url;
public StaticUrlGenerator(String url) {
this.url = url;
}
@Override
public String prepareUrl(Void nothing) {
return url;
}
}
는 prepareUrl
방법에 대한 인수에 null를 요구대로 StaticUrlGenerator는 사용하기 불편하다.
은 내가 input
매개 변수를 잃을 수 :
interface UrlGenerator<T> {
String prepareUrl(T input);
}
가 지금은 (생성자) 다른 방법으로 구현하는 클래스에 필요한 입력을 통과해야합니다. 이 방법으로 클래스의 무국적 속성을 잃어 버렸습니다. 입력을 변경할 때마다 다른 생성자 인수로 다시 작성해야합니다.
class SchedulePageUrlGenerator implements UrlGenerator {
public static final String QUERY_STRING_BASE = "?from=";
private final String showingBaseUrl;
private final LocalDate date;
public SchedulePageUrlGenerator(String showingBaseUrl, LocalDate date) {
this.showingBaseUrl = showingBaseUrl;
this.date = date;
}
@Override
public String prepareUrl() {
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd");
String dateStr = fmt.print(date);
return showingBaseUrl + QUERY_STRING_BASE + dateStr;
}
}
내 설계에는 근본적으로 잘못된 것이 있어야한다고 생각합니다.
:'문자열 prepareUrl (T. .. input); ' –
Twitter API 클라이언트처럼 보입니다 :-) 어쨌든 ... OO에서 작업은 이름으로 정의되는 것이 아니라 무엇을 할 지 정의됩니다. 시나리오에서 prepareUrl은 다른 클래스에서 다른 작업을 수행합니다. 해결책은 두 개의 메소드에 서로 다른 이름을 부여하여 조작을 구별하는 것입니다. –