問題タブ [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 - 私のModelInputクラスでJoshua Blochのバージョンで説明されているビルダーパターンを使用するには?
以下のクラスにビルダーパターンを使用しようとしています..最初はクラスのコンストラクターを使用してすべてのパラメーターを設定していましたが、偶然ビルダーパターンに出くわし、ユースケースに適しています。
以下は、人々がほとんど合格する私のクラスであり、userId
常にですが、他のフィールドはオプションであり、合格する場合と合格しない場合があります。また、タイムアウト値を渡していない場合は、デフォルトのタイムアウト値を常に 500 に設定する必要がありますが、タイムアウト値を渡している場合は、デフォルトのタイムアウト値を上書きする必要があります。ここで、Preference は 4 つのフィールドを持つ ENUM です。clientId
parameterMap
ModelInput
以下は、コンストラクターにパラメーターを渡してオブジェクトを構築するために最初に使用した例です。最初はすべてのパラメーターを渡していましたが、クライアントはほとんどを渡しますuserId
、clientId
およびparameterMap
always およびその他のフィールドはオプションです..
上記のコードを変換して、スレッドセーフで不変でもある効果的な Java で Bloch の言うように Builder パターンの使用を開始するにはどうすればよいですか?
そして、ビルダーパターンを使用して、これに対して検証チェックを行うにはどうすればよいですか? クライアントIDとタイムアウト、およびマップと同じように、ユーザーIDにゼロまたは負の数値を渡すことができる可能性があります..
java - その値が渡されない場合にビルダーパターンでデフォルト値を使用し、スレッドセーフにする方法は?
クラスにビルダーパターンを使用しようとしています..
以下は、Effective Java, 2nd Edition で示した Joshua Bloch バージョンに従って作成した Builder クラスです。私たちの顧客はほとんどの場合userId
、clientId
常に合格しますが、他のフィールドはオプションであり、合格する場合としない場合があります。ここで、Preference は 4 つのフィールドを持つ ENUM クラスです。
以下は私のENUMクラスです-
パラメータを構築するためにこのような呼び出しを行っていInputKeys
ます-
ここで私が見ている唯一の問題は、顧客がタイムアウト値を渡していない場合、デフォルトのタイムアウト値を常に 500 に設定する必要がありますが、顧客がタイムアウト値を渡している場合は、デフォルトのタイムアウト値を上書きする必要があることです。そして、これは私にとってはうまくいきません。なぜなら、デバッグ モードで私のものを見ると、keys
常にタイムアウト値が 0 になるからです。
不足しているものはありますか?また、このクラスを不変でスレッド セーフにしようとしています。
アップデート:-
人々がこれを使用する特定のシナリオは、顧客が私たちのコードを呼び出すために使用するファクトリです。keys
クラスの1つがそれを実装している単純なインターフェースがあり、次に、このパラメーター を受け入れるその実装の特定のメソッドを呼び出すファクトリがあります。
そのため、アプリケーションで以下のコードを使用して呼び出しを行い、マルチスレッド環境でアプリケーションを実行する可能性があります。
そして、InputKeys Builder を複数回使用してキーを作成できます。これは 1 回だけではありません。取得する userId と clientId が何であれ、InputKeys を再度構築します。
java - Builder パターン クラスで無効な入力をチェックする方法は?
以下は、 と の 2 つのフィールドが必須である私のビルダー クラスuserId
ですclientId
。
今、私はこのビルダークラスを次のように呼び出します -
しかし、負の userId と負の clientId、負のタイムアウト値、または空の attributeMap を渡すなど、誰かが間違った入力値を渡す可能性があります。私のビルダークラスでこのような状況に対処するにはどうすればよいですか?
の各変数に対して IllegalArgumentcheck を使用している場合、if else if block
Builder クラス全体が IllegalArgumentException チェックであふれてしまいますか?
これを行うより良い方法はありますか?
factory-method - ビルダー vs ファクトリー メソッド パターン
Builder パターンについて読んでいましたが、いつものように Factory パターンと混同されました。
Abstract Factory と Builder パターンの違いを示す良い記事を見てきました。
http://champika-nirosh.blogspot.in/2008/04/what-is-difference-between-abstract.html
しかし、私の混乱は、Abstract Factory に似た Builder パターンよりも、Factory Method パターンに似ているように感じるということです。私の理解が正しいかどうかはわかりません。しかし、ファクトリ メソッドでも、別のファクトリ (コンクリート ファクトリのメソッド) を使用して、1 つの特定のオブジェクト (製品のファミリではありません) を作成します。そのシナリオでは、Builder が Factory Method パターンとどのように異なるかが異なります。Builder でオブジェクトを作成するには、より多くの手順が必要であることは知っていましたが、それ以外に、オブジェクトを使用する必要がある特定のシナリオはありますか? 私を案内してください。
ありがとう。
c# - アクションを実行するインターフェースのリストを作成する方法
質問は言うことで答えられることは知っていますがforeach(var item in items){item.doSomething()};
、私が求めているのは少し異なります。これがインターフェースです。
管理可能なクラス .cs
以下は、私のコードがどのように見えるかです
MainManagerClass.cs
ここにあるこのコードが機能しないことはわかっていますが、これは C# で実行できるはずです。これができるかどうか誰でも知っていますか?そうでない場合は、世界の終わりではない場合はforeach
、各メソッドで a を実行します。
design-patterns - IntelliJ の Fluent-API Builder のライブ テンプレート
IntelliJ で「流れるようなビルダー」を生成したい場合、コンストラクターをビルダーに置き換える機能で使用されるライブ テンプレートを編集する場所を知っている人はいますか?
上記の機能は、私が探している .attribute または .withAttribute のより流暢な命名パターンではなく、一般的な setAttribute 命名規則を使用して Builder パターン オブジェクトを自動的に構築します。
最終的には、IntelliJ 内の他のさまざまな自動生成コードの形式を変更する方法と同様に、コードのレンダリングに使用される設定/テンプレートを変更できるようにしたいと考えています。
java - リフレクションを使用したジェネリック ビルダー パターン クラス
ジェネリックを使用してビルダー パターンを実装することは素晴らしいことです。理論的には、リフレクションを使用して次のことが可能になります。
私はすでに次のコードを作成しました:
これはどのように達成できますか?
java - クライアント lib の Builder パターンを使用した Guice インジェクション
私は Google Guice を初めて使用し、特定のシナリオでの使用方法について頭を悩ませようとしています。私はかなり複雑なサービス クライアントを構築していますが、(私は信じています) Builder パターンを正しくインスタンス化する必要があります。このクライアントは最終的に独自の JAR ライブラリにパッケージ化されるため、内部で DI を処理するように Guice を使用したいと考えています。以下は、私のコードの大幅に簡略化されたバージョンです。
ご覧のとおり、階層/依存グラフは次のとおりです。
MyClient
*ResourceImpl
sを注入する必要があります- それぞれにインスタンス
*ResourceImpl
を注入する必要があります*Command
意図された使用例は、MyClient
impl の構築を次のように簡単にすることです。
MyClientImpl
そこで、 、その内部ビルダー、および私の Guice モジュールに対する私の最善の試みを次に示します。
しかし、私の人生では、次の方法/場所がわかりません。
*Command
s を s にバインドし*ResourceImpl
ます。と*ResourceImpl
をMyClientImpl
インスタンスにバインドします
何か案は?