以下は、基本的なビルダー パターンです。
enum AccountType {
BASIC,PREMIUM;
}
class AccountBuilder {
private AccountBuilder(Builder builder) {}
private static class PremiumAccountBuilder extends Builder {
public PremiumAccountBuilder () {
this.canPost = true;
}
public PremiumAccountBuilder image(Image image) {
this.image = image;
}
}
public static class Builder {
protected String username;
protected String email;
protected AccountType type;
protected boolean canPost = false;
protected Image image;
public Builder username(String username) {
this.username = username;
return this;
}
public Builder email(String email) {
this.email = email;
return this;
}
public Builder accountType(AccountType type) {
this.type = type;
return (this.type == AccountType.BASIC) ?
this : new PremiumAccountBuilder();
}
public Account builder() {
return new Account (this.name,this.email,this.type, this.canPost, this.image);
}
}
}
したがって、プレミアム アカウントは基本的に canPost をオーバーライドし、画像を設定できます。
次のようなことができるかどうかわかりません
Account premium = new AccountBuilder.Builder().username("123").email("123@abc.com").type(AccountType.PREMIUM).image("abc.png").builder();
type
プレミアムアカウントの場合、メソッド呼び出しの後と同じように、メソッド呼び出しを行うことができimage
ます。
画像メソッドを認識して見つけることができなかったため、エラーが発生しました。これが正しい方法であるかどうかはわかりませんが、それよりも良い方法はありますか?