問題タブ [builder-pattern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Builder パターンを使用してクラスのインスタンスを作成するように myBatis を構成できますか?
多くのインスタンス フィールドを持つ (Java) クラスがあります (その多くはオプションです)。すべてのフィールド (したがってクラス) を不変にしたいと考えています。そのため、クラスのインスタンスを構築するために Builder パターンを使用したいと思います。
Builder パターンを使用してクラスのインスタンスを作成するように myBatis を構成できますか? myBatis にマップを返させ、そのマップを使用してコード内のインスタンスをビルドできることはわかっています。ただし、Java Beans とコンストラクターを使用してインスタンスを作成する方法と同様に、このマッピングを構成する (または何らかの規則を使用する) 方法を探しています。
編集(例を含めるため)
次に例を示します。
次に、次のようなマッパーがあります。
最後に、マッパー インターフェイスがあります。
また、myBatis を介して静的ファクトリ メソッドを使用してインスタンスを作成できるようにしたいと考えています。例えば:
具体的には、myBatis に newInstance(String, String) を呼び出させるにはどうすればよいですか?
java - ビルダーパターンの正しい使い方
builder pattern
アプリケーション内で複合体を作成するために を使用することを検討してobjects
います。ただし、使用する正しいパターンであるかどうかについては懸念があります。
この例を見てください。ここでは、適切に機能するいくつかのコンクリートPizzaBuilders
が作成されているのがわかります。ただし、私のアプリケーションでは、構築されているものに関する情報を渡す機能が必要です。たとえば、 の場合、ユーザーがやなどの特定のものを選択できるPizzaBuilders
を作成する機能が必要です。ビルダーに渡す必要がある情報はさまざまであることは注目に値します。custom pizza
sauce
toppings
この問題に対して正しいパターンを使用することを考えているのか、それとももっと適したものがあるのか 教えてください。それが問題の正しいパターンである場合、ビルダーに情報を渡す最もクリーンな方法についてアドバイスしていただけますか? インスタンス化の時点でしょうか?
java - 1つのフィールドを設定する必要があるオブジェクトを構築するJavaパターン?
A、B、C の 3 つのフィールドを持つクラスのオブジェクトを作成する必要があります。有効なオブジェクトには、ユーザーが設定した A、B、または C の少なくとも 1 つがあります。希望に近いBuilder パターンを調べましたが、必須になっているフィールドは 1 つだけです。私が持っている3つのいずれかになるように設定する必要がある1つのフィールドが必要です。助言がありますか?
私の代替手段は、7つのコンストラクターを使用することです({A}、{B}、{C}、{A、B}、{B、C}、{A、C}、{A、B、C}の場合)
c++ - 継承による C++ Builder パターン
ビルダー パターンを使用したいクラスがありますが、そのクラスは、アクセスする必要のある属性を持つ基本クラスから派生しています。BaseClass
Builder を派生させたとしても、BaseClass
または同様に臭いものから派生させたとしても、公開しないと実装のメンバーにアクセスできません。私のクラス:
BaseClass.h:
DerivedClass.h:
DerivedClass.cpp:
私の問題は、アクセスできないことですbuilder.name
。Visual Studio は、「ポインターまたはオブジェクトBaseClass::name
を介して保護されたメンバーにアクセスできない」と言っています。DerivedClass::Builder
のをいじってみましBuilder
たfriend
がBaseClass
、役に立ちませんでした。この投稿でも回避策が提供されていますが、これは Java 用であり、非常に面倒です。
C++ で継承を使用してビルダー パターンを使用する適切な方法はありますか?
c++ - Builder パターンを構成にプルアップするための C++ テンプレートの問題?
コンストラクターの一部として多数のパラメーター (つまり、構成) を必要とし、明確に定義された作成手順も必要とするアルゴリズムがあります。したがって、必要なパラメーターを設定し、中間インスタンスと最終インスタンスを作成できるBuilder パターン実装を作成しました。
ここで、Builder を次のように定義します。
この時点ですべて問題ないように見えますが、今度Pull Up
はビルダーのセッターをSomeAlgoConfig
クラスに入れたいと思います。これにより、パラメーターの複雑な長いリストの代わりに単純な構成を渡すユースケースもカバーできるようになります。この単純な構成は、Java で値オブジェクトまたは Bean として知られているものです。新しいビルダーは次のようになります。
今SomeAlgoConfig
実装:
インテントは次のように使用されます。
これは私が推測するトリックを行います。ただし、(ビルダーのコンテキスト外で) 単独で使用したい場合はいつでもSomeAlgoConfig
、パラメーターとして渡すなど、自身のテンプレートパラメーターで宣言する必要がありますSomeAlgoConfig<SomeAlgoConfig>
。テンプレート型としてデフォルトでそれ自体になるように定義するにはどうすればよいですか? たとえば、これを実行してもうまくいきません。その時点では が不明なtemplate<typename T = SomeAlgoConfig> class SomeAlgoConfig
ためです。SomeAlgoConfig
java - RESTリクエストのパラメータをJavaメソッドに渡す方法は?
REST API を提供するサービスの 1 つへのアクセスを簡素化するために、Java SDK を構築しています。この SDK は、サードパーティの開発者が使用するものです。
問題の 1 つは、各要求のオプションのパラメーターを表す適切な方法を見つけることです。
残りのエンドポイントがあるとしましょう:GET /photos
これには、いくつかのオプションのパラメーターがあります: sortBy
、pageSize
、pageNumber
など。
Map<String,String>
1 つの解決策は、残りの呼び出しを表す api メソッドへのパラメーターとしてを受け入れることです。
このソリューションにはいくつかの問題があります。
- メソッドの署名は、このメソッドで使用できるオプションのパラメーターの名前 (および有効な値) に関する情報を開発者に提供しません。彼は REST API のドキュメントを参照する必要があり、理想的にはその必要を避けたいと考えています。
- 開発者は、呼び出すメソッドのパラメーターを使用していくつかの Map を作成し、パラメーターの名前と値をあらゆる場所でハードコーディングすることになります。これは、それらが変更された場合、それらを修正するのが面倒になることを意味します.
もう 1 つの解決策は、オプションのパラメーターに関する情報を含む Options オブジェクトを使用することです。ビルダー パターンを使用して、このオブジェクトを構築することもできます。
メソッドのシグネチャは次のようになります。
開発者は、利用可能なオプションのパラメーターが何であるかを理解し、次のPhotosOptions
ようなものを簡単に構築できます。
問題は、SDK でカバーしようとしているサービスには、実装する必要がある膨大な範囲の要求があり、それらのほとんどすべてに許可されるオプションのリストが異なることです。これにより、多数のオプション クラスが生成される場合があります。
ここでの最善の解決策は何ですか? 組み合わせごとに Options オブジェクト (およびそのビルダー) を作成しますか? ここでは、あらゆる種類のパラメーターの組み合わせがあるため、継承はあまり役に立ちません。
java - returnステートメントを使用してEclipseにセッターを生成させるにはどうすればよいですか
this
生成されたセッターで日食が返されるようにします。これはBuilder-Patternに非常に役立ちます。
デフォルトでEclipseが行うこと:
私が日食にしたいこと:
以下で変更できるいくつかのテンプレートを見つけました。
Preferences -> Java -> Code Style -> Code Templates
ただし、setter の署名ではなく、setter の本体のみを編集できます。
java - nullを返すビルダーパターン
私はビルダーパターンを使用していますが、フィールドを設定した後、次のように返されnullpointerException
ます:
ここに BaseServiceRequest.java があります ::
ここにメインクラスがあります::
request.getMessageID().getBOI1()
で 23の出力を取得する必要があります
が、null ポインター例外が発生します
java - Bloch のビルダー パターンをスレッド セーフにする: 決して無効でない場合は、コンストラクターを囲む際に再チェックが必要ですか?
私は最近、多数のオプション フィールドを持つオブジェクトを作成するJoshua Bloch のビルダー パターンを学びました。私はそのようなものを何年も使用してきましたが、Bloch の本で提案されるまで、内部クラスを使用したことはありませんでした。大好きです。
私は、別のスレッドが実際に構築される前にブライダーの構成を変更する可能性があることを理解しています (を使用build()
)。以下は、オプションでデータを再検証するビルダー クラスの例です。
だから私の質問はこれです:これが十分に堅牢な設計であると仮定すると、すべての値にデフォルトがある場合--このクラスがデフォルトを使用するための悪い選択であることを知っている--そして、すべての設定試行が検証される場合、この再チェックが必要ですか? ? 異なる場合がありますが、無効になることはありません。あれは正しいですか?
(この設計は扱いやすいですが、再検証が必要になる可能性があるため、確かに複雑です。正直なところ、私はマルチスレッドを使用したことはありませんが、マルチスレッドを使用する人がライブラリを使用できないようにしたくありません。)
アドバイスありがとうございます。