Iは構造下記た:第一の方法としてそれを使用するとき私はspecialConfigMehthod1
を使用することができこれにはどんなデザインパターンがありますか? (ビルダー、継承)
public class MyClass {
public static class DefaultBuilder {
private int config1;
private String config2;
public DefaultBuilder configMethod1(int config1){
this.config1 = config1;
return this;
}
public DefaultBuilder configMethod2(String config2){
this.config2 = config2;
return this;
}
}
public static class SpecialBuilder extends DefaultBuilder {
private long specialConfig1;
public SpecialBuilder specialConfigMethod1(long specialConfig1){
this.specialConfig1 = specialConfig1;
return this;
}
}
}
...
public class Main {
public static void main(String[] args){
new MyClass.DefaultBuilder().configMethod1(1).configMethod2("Test"); // Works great
new MyClass.SpecialBuilder().specialConfigMethod1(10).configMethod1(1).configMethod2("Test"); // Works great
new MyClass.SpecialBuilder().configMethod1(1).configMethod2("Test").specialConfigMethod1(10); // Does not work
}
}
を。しかし、これは図書館のAPIでなければならないので、私は彼に電話を注文する方法を伝えたくありません。さらに、DefaultBuilder
を使用しているときに、specialConfigMethod1()
に電話することはできません。私はSpecialBuilder
のすべてのメソッドをオーバーライドすることができますが、継承が無意味なので、私はそのソリューションが嫌いです。私はまた、インターフェイスについて考えているが、そこに良い解決策は見つかりませんでした。 (Javaの場合は可能です:) :)
これを実際の例で見る場合は、ここに行くことができます:GitHub これは私の最初のオープンソースです私はAPIを好きではありません。
抽象クラスの素敵なアイデアですが、私はDefaultBuilderを作成したい場合、私は最高のはこのことでしょうあなたの質問を見ていることと思います(または他のビルダー)は、常にspecialConfigMethod1を実装する必要があります。 – L3n95
どのプログラミング言語を使用していますか? Javaでは、静的型が使用されるため、必要なものを作成する他の方法はありません。したがって、あなたの問題では、specialMethod1を呼び出すと、返されるオブジェクトの動的型はSpecialBuilderですが、DefaultBuilderを返します。その他のソリューションは、SpecialBuilderに以下のようにキャストできます。 new((SpecialBuilder)MyClass.SpecialBuilder()。configMethod1(1).configMethod2( "Test"))specialConfigMethod1(10); – ronce96
はい私はJavaを使用しています。それはそれですが、私はそれに対処しなければなりません。ご回答有難うございます。 – L3n95