問題タブ [factory-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.

0 投票する
3 に答える
3817 参照

c# - コスト計算アプリのデザインパターン?

以前に助けを求めようとした問題がありますが、その時は解決できませんでした。そのため、問題を単純化して、これについてより具体的な助けが得られるかどうかを確認しようとしています。私を夢中にさせている…</p>

基本的に、私はこのアプリケーションの実用的な (より複雑な) バージョンを持っています。これはプロジェクト コスト計算ツールです。しかし、私は同時にアプリケーションをより良く設計する方法を学ぼうとしているので、この設計をどのように改善できるかについて意見を求めています. 基本的に私が欲しいのは、(ここでは) 2 つの場所で繰り返される条件文への入力です。以前に得た提案は、戦略パターンまたは工場パターンを使用することでした。また、マーティン・ファウラーの本で、ポリモーフィズムによる条件付きリファクタリングを提案していることも知っています。私は彼のより単純な例でその原則を理解しています。しかし、ここでこれらのことのいずれかを行うにはどうすればよいですか (適切な場合)。私の見方では、計算はいくつかの条件に依存しています: 1. それはどのような種類のサービスですか? 2. プロジェクトは小規模ですか。中か大か?(「製品は新しいものですか、それとも既存のものですか?」など、他のパラメーターも同様に異なる場合があることに注意してください。したがって、そのようなパラメーターは追加できるはずですが、例を単純にするために2つのパラメーターのみを使用するようにしました具体的な助けを得ることができます)

したがって、ポリモーフィズムを使用したリファクタリングは、最初の条件 (サービスの種類) に対して既に持っているいくつかのサブクラスを作成することを意味し、2 番目の条件 (サイズ) に対してもさらにサブクラスを作成する必要がありますか? AnalysisSmall、AnalysisMedium、AnalysisLarge、WritingSmallなど…??? いいえ、私はそれが良くないことを知っています.とにかくそのパターンを扱う方法がわかりませんか?

基本的に、戦略パターンを使用するという提案についても同じ問題が見られます (工場パターンは、上記のポリモーフィズムを達成するためのヘルパーにすぎません)。ですから、これらのクラスを最適な方法で設計する方法について具体的な提案があれば、本当に感謝しています! オブジェクトを正しく選択したかどうか、または再設計する必要があるかどうかも検討してください。(「工場のパターンを考慮する必要があります」などの回答は明らかに役に立ちません...私はすでにその道を進んでおり、この場合の正確な方法に困惑しています)

よろしく、

アンダース

コード (非常に単純化されています。データなどに構成ファイルを使用せずに、列挙型の代わりに文字列を使用しているという事実を気にしないでください。これらの設計上の問題を理解したら、実際のアプリケーションで必要に応じて実行されます。 ):

0 投票する
4 に答える
1050 参照

c++ - ファクトリメソッドと循環依存

編集:人々に感謝します、今私は私の間違いを見ます。

私が間違っていなければ、ファクトリメソッドの性質上、循環依存関係があります。

基本クラスはサブクラスを作成するため、サブクラスを知る必要があり、サブクラスは基本クラスを知る必要があります。循環依存を持つことは悪いプログラミング慣行ですよね?

実際に私は工場を実装しました、私は上記の問題を抱えています、私は追加しました

私はまだ得ています

そして、このエラーは、基本クラスのヘッダーからサブクラスのインクルードを削除すると消えます。

0 投票する
7 に答える
6426 参照

c++ - C ++テンプレートを使用して、コンパイル時にコンストラクターメソッドをAbstractFactoryに動的に登録します

MessageFactoryクラスを実装してMessageオブジェクトをインスタンス化するとき、私は次のようなものを使用しました。

これは問題なく機能しますが、新しいメッセージを追加するたびに、新しいXXX_MSGを追加し、switchステートメントを変更する必要があります。

調査の結果、コンパイル時にMessageFactoryを動的に更新して、MessageFactory自体を変更せずに必要な数のメッセージを追加できるようにする方法を見つけました。これにより、メッセージクラスを追加/削除するために3つの異なる場所を変更する必要がないため、コードをよりクリーンで簡単に保守できます。

ここでのテンプレートは、MessageFactoryクラス、MessageTmplからサブクラス化されたすべての新しいMessageクラス(PingMessageやPongMessageなど)に登録することで魔法をかけます。

これはうまく機能し、コードのメンテナンスを簡素化しますが、この手法についてはまだいくつか質問があります。

  1. これは既知の手法/パターンですか?名前は何ですか?それについてもっと情報を検索したいです。

  2. 新しいコンストラクターを格納するための配列MessageFactory::m_List [65536] std :: mapを作成したいのですが、そうすると、main()に到達する前でもプログラムがセグメンテーション違反になります。65536要素の配列を作成するのはやり過ぎですが、これを動的コンテナーにする方法は見つかりませんでした。

  3. MessageTmplのサブクラスであるすべてのメッセージクラスに対して、コンストラクターを実装する必要があります。そうでない場合は、MessageFactoryに登録されません。

    たとえば、PongMessageのコンストラクターにコメントする:

    その結果、PongMessageクラスはMessageFactoryによって登録されず、プログラムはMessageFactory :: Create(11)行でセグメンテーション違反を起こします。問題は
    、なぜクラスが登録されないのかということです。必要な100以上のメッセージの空の実装を追加する必要があると、非効率的で不必要に感じます。

0 投票する
2 に答える
511 参照

c# - C#UserControlファクトリ

を拡張する2つのクラスがあるとしましょうUserControl。各コントロールはカスタムを提供しますevent(これはインターフェイスを使用して実行できます)。

コントロールの1つを奇数日に表示し、もう1つを偶数日に表示したいとします。

UserControlまた、コントロールの種類が最終的にどうなるかを知らなくても、フォーム上でドラッグアンドドロップ(Visual Studio)できるようにする必要があります。

どうやってそれをしますか?ここでファクトリパターンは役に立ちますか?

0 投票する
1 に答える
481 参照

oop - クラス名文字列でクラスインスタンスを取得

D の関数 Object.factory(char[] className) に気付きましたが、期待どおりに動作しません。それは動作しません ;)

例:

これにより、「Class string: TestClass」というメッセージが表示されるはずですが、「Class not found」と表示されます。

なぜこれが起こるのか、どうすれば修正できるのか誰か知っていますか?

または、独自のクラス ファクトリを作成する必要がありますか。たとえば、Object[string] classes;クラス インスタンスを持つ静的配列を持つクラスを作成します。新しいインスタンスが必要な場合は、次のようにします。

編集:

私は今、次のように使用しています (例、これは Web HMVC パターン用です)。

この種のことは、C++ で行うのは困難です ;)

0 投票する
11 に答える
100375 参照

java - Hibernateが引数コンストラクターを必要としないのはなぜですか?

引数なしのコンストラクターは要件です(Hibernateのようなツールは、このコンストラクターでリフレクションを使用してオブジェクトをインスタンス化します)。

私はこの手の波状の答えを得ましたが、誰かがさらに説明できますか?ありがとう

0 投票する
2 に答える
163 参照

c++ - XML コードに基づいてオブジェクトを構築する方法は?

HTML コードの一部を表す XML ファイルがあります。
これらの XML ファイルには、ウィジェットの宣言も含まれています。
XML ファイルの例:

すべてのウィジェットが継承するメイン Widget クラスがあります。
問題は、それをどのように作成するかです。
ここに私のオプションがあります:

  1. XML ファイルを解析し、ウィジェットを必要なオブジェクトにバインドするために必要なコードを作成するコンパイル時ツールを作成します。
    • 利点:
      • システムに追加のランタイム オーバーヘッドが発生することはありません。
      • セッターをバインドするのは簡単です。
    • 短所:
      • ビルド チェーンに別のステップを追加します。
      • システム内のすべてのウィジェットをパーサーに追加する必要があるため、保守が困難です。
      • マクロを使用してウィジェットをバインドします。
      • 複雑なコード
  2. すべてのウィジェットを自動的にファクトリに登録する方法を見つけます。
    • 利点:
      • すべてのバインディングは完全に自動で行われます。
      • すべての新しいウィジェットは、それを登録する WidgetFactory メソッドを呼び出すだけでよいため、オプション 1 よりも保守が簡単です。
    • 短所:
      • 保守性の悪夢を導入せずにセッターをバインドする方法がわかりません。
      • メモリと実行時のオーバーヘッドが追加されます。
      • 複雑なコード

何が良いと思いますか?より良い解決策を提案できますか?

0 投票する
2 に答える
2963 参照

c# - 依存性注入とファクトリ

次のシナリオを最適に処理する方法を見つけようとしています。

RequestContext次のような外部サービスに依存するクラスを想定します。

最終的にインスタンス化するクラスでは、どのような種類の依存関係が必要RequestContextですか?可能性はありますがServiceFactory<IWeatherService>、それは正しくないようです。または、次のように作成することもできますIRequestContextFactory

次に、IRequestContextFactoryスルーコンストラクターインジェクションを渡します。

これは良い方法のように思えますが、このアプローチの問題は、発見可能性を妨げると思うことです(開発者はファクトリについて知って実装する必要がありますが、実際には明らかではありません)。

私が見逃しているより良い/より発見可能な方法はありますか?

0 投票する
1 に答える
538 参照

java - Spring フレームワークを使用したインスタンスの作成について質問がありますか?

Spring フォームから入力する必要があるコマンド オブジェクトを次に示します。

そして住所

ここで、次の MultiActionController を想定します。

Person の Address 属性はオンデマンドで初期化する必要があるため、 newCommandObjectをオーバーライドして Person のインスタンスを作成し、アドレス プロパティを初期化する必要があります。そうしないと、NullPointerExceptionが発生します

OK、Expert Spring MVC と Web Flow は言う

代替オブジェクト作成のオプションには、BeanFactory からインスタンスをプルすることや、メソッド注入を使用して透過的に新しいインスタンスを返すことが含まれます。

最初のオプション

  • BeanFactory からインスタンスをプルする

次のように書くことができます

しかし、メソッドインジェクションを使用して新しいインスタンスを透過的に返すことで、彼は何を言いたいのですか??? 彼が言ったことをどのように実装するかを教えてもらえますか???

ATT : この機能は、MultiActionController の代わりに SimpleFormController で満たすことができることを知っています。しかし、それは単なる例として示されているだけで、他には何もありません

0 投票する
2 に答える
236 参照

oop - 抽象ファクトリによって作成されたクラスに特定のプロパティを設定するにはどうすればよいですか?

抽象ファクトリ パターンを使用して、具体的なファクトリに型固有のパラメータを持つ具体的なクラスを作成させることは可能ですか? それとも、それぞれの具象ファクトリによって作成されたさまざまな具象クラスは、同じフィールドを持つ必要がありますか?

例) 以下の画像では、クライアント (アプリケーション) から与えられた異なる引数セットを使用して、WinButton と OSXButton をインスタンス化するにはどうすればよいでしょうか?

ここに画像の説明を入力