URLを作成するために使用される入力としてジェネリック型をとるメソッドを指定するインターフェースがあります。
interface UrlGenerator<T> {
String prepareUrl( T input );
}
パラメータを必要としない実装が1つあります。ジェネリック型TにはVoidを使用します。
class StaticUrlGenerator implements UrlGenerator<Void> {
private final String url;
public StaticUrlGenerator( String url ) {
this.url = url;
}
@Override
public String prepareUrl( Void nothing ) {
return url;
}
}
StaticUrlGeneratorは、prepareUrl
メソッドの引数としてnullを必要とするため、使いにくいです。
パラメータを失う可能性があり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;
}
}
私のデザインには根本的な問題があるに違いないと思います。