問題タブ [abstract-factory]

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 投票する
2 に答える
146 参照

php - PHPで基本クラスオブジェクトとして派生クラスオブジェクトを作成する方法

phpでファクトリパターンを実装しています。AbstractFactoryクラスがあり、1つはConcreteFactoryクラスです。以下は私が使用しているコードです:

(AbstractFactory $afobject )解析エラーを返します。
このオブジェクトの作成方法を教えてもらえますか?

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

java - パラメータを使用した実行時のJavaインスタンス化クラス

抽象ファクトリを使用して具象サブクラスのインスタンスを返しています。具象クラス名の文字列を指定して、実行時にサブクラスをインスタンス化したいと思います。また、コンストラクターにパラメーターを渡す必要があります。クラス構造は次のとおりです。

上記の私のattmeptは、次の例外をスローしています:java.lang.NoSuchMethodException: Child.<init>()、その後にスタックトレースが続きます。

どんな助けでも大歓迎です。ありがとう!

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

java - 抽象ファクトリにデータベース アクセスの依存関係を挿入するのは良いことですか?

検証マップを注入する必要があるさまざまな StudentValidator クラス インスタンスを (指定されたパラメーターに基づいて) 作成することが想定されている抽象ファクトリ クラス StudentValidatorFactory があります (以下のコードを参照)。

私の質問は、StudentValidatorFactory.createStudentValidator(int studentType)メソッドについて、永続ストレージからの検証マップの読み取り (学生タイプに基づく) を create メソッド内で行う必要があるかどうかです。そうでなければ、ファクトリはそのような実装の詳細について認識/依存する必要がありますか?

学生バリデータを作成するときに switch(studentType) ステートメントを回避する解決策があれば幸いです。私の頭の上のアイデアは、内部で管理されたマップを持ち、リフレクションを介して StudentValidator 具象クラスのインスタンス化を実行することです。

このような手法を使用する利点は、バリデーターのテストが (依存性注入によって) はるかに簡単になることです。

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

c++ - C ++のリターンタイプとして抽象ファクトリと配列をエレガントに処理するにはどうすればよいですか?

抽象ファクトリパターンを念頭に置いて、具体的なファクトリがcreateButton * s *仮想メソッドをオーバーライドし、より幅広いボタンの配列を返す必要があるクラス階層があると想像してください。C ++は共変の戻り型のみをサポートするため、これを解決するための洗練された回避策は何でしょうか。dynamic_cast?

私の要件に合うようにGoFの例を修正したもの:

そして、アプリケーションのスケルトン:

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

php - 抽象ファクトリは「new」を使用しますか?

できる限り依存性注入を使用しようとしていますが、短命の依存性などに関しては問題があります。

たとえば、データベースで見つかったブログのリストを生成するブログ マネージャー オブジェクトがあるとします。これを行うためのオプションは(私が知る限り)次のとおりです。

  1. 新しいブログ();
  2. $this->loader->blog();
    • ローダー オブジェクトは、データベース オブジェクト、テキスト フィルターなど、さまざまな種類のオブジェクトを作成します。
  3. $this->blogEntryFactory->create();

ただし、#1 は強いカップリングを作成するので悪いです。#2は、オブジェクトファクトリを事前に注入する必要があることを意味するため、まだ悪いようです-作成できる他のすべてのオブジェクトを公開します.

番号 3 は問題ないようですが、番号 3 を使用する場合、「新しい」キーワードを blogEntryFactory 自体に入れるか、またはローダーを blogEntryFactory に挿入してローダーを使用するか?

blogEntryFactory のような多くの異なるファクトリがある場合 (たとえば、userFactory と commentFactory を使用できます)、これらすべての異なるファクトリに「new」キーワードを配置すると、依存関係の問題が発生するように見えます。

これが理にかなっていることを願っています...

ノート

この特定のブログの例ではこれが不要であるという回答がいくつかありましたが、実際には、Abstract Factory パターンを使用する必要がある場合があり、それが私が理解しているポイントです。その場合、「新しい」を使用しますか、それとも何か他のことをしますか?

0 投票する
5 に答える
2593 参照

c# - パラメータを受け取る抽象ファクトリのユニットテスト

抽象ファクトリ実装が与えられた場合:

このクラスにはどの単体テストが作成されますか?param1とparam2がFooの作成に転送されたことを確認するにはどうすればよいですか?Fooのこれらの公共施設を作成する必要がありますか?それはカプセル化を破っていませんか?それとも、これを統合テストに任せるべきですか?

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

java - Javaジェネリックの抽象ファクトリの問題

私はこの仕事をするのに苦労しています:

問題はコンパイルエラーです:

タイプの不一致:MapperFactory.MyTaskMapperFactoryからMapperFactoryに変換できません

ここの私のMapperFactoryで:

このエラーを修正する方法はありますか?

もちろん交換:

と:

うまくいくでしょうが、それは私が探している答えではありません。

これは、一般的な一般的な抽象ファクトリパターンの問題のようです。カスタム作成されたオブジェクトを使用してソースサンプルを提供する回答も歓迎します。

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

php - PHP で抽象ファクトリ パターンを使用してカスタム クラスのインスタンス化を許可する

現在、抽象ファクトリを使用して、リクエスト オブジェクトを生成するためのカスタム クラス名を指定できるようにしています。これを行う理由は、コードを変更せずにコア機能を簡単に拡張できるようにするためです。しかし最近、私はこのアプローチの有効性について疑問を持っています. だから私の質問はこれです:

ファクトリが、予想されるインターフェイスに一致する送信されたクラス名をインスタンス化できるようにすることは、ファクトリの概念のろくでなし化ですか? これを避けるために、私はより良いサービスを受けることができますか?

アップデート

ここでの論理は次のとおりです。一方で、実際の自動車工場 (たとえば) は、その種の車を製造するための機械を備えていなければ、自動車を製造することはできません。一方、以下のコードは、同じ自動車工場に、本来意図されていなかったカスタムカーを作るための設計図を与えるようなものです。

別の方法は、ファクトリで使用できるカスタム クラス名を指定する構成オブジェクトを渡し、ファクトリが構成で指定されたカスタム クラス名と明確に一致する場合にのみカスタム クラスを生成するように制限することです。何かご意見は?


そして、関連するコード...

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

design-patterns - DAO / AbstractFactoryPattern-複数のデータソース

現在、抽象ファクトリパターンを使用していくつかのDAOを設定しています。これは次のようになります。

staticGetDaoFactory()は、基になるを返しますSqlDaoFactory。今日まで、すべてのDaosは同じSQLデータベースで動作していました。ここで、このファクトリに別のDAOを追加したいと思いますが、DAOはSQLデータベースではなく外部サービスと対話します(これがそうであるとしましょうGetCompanyDao())。基本的に、このGetCompanyDao()メソッドを抽象DaoFactoryクラスに追加して、パブリックインターフェイスが基盤となる実装から完全に分離されるようにします(特定のdaoがSQLまたは外部サービスを使用しているかどうかを判断する必要はありません)。

このDAOファコトリーが一部のDAOにSQLを使用し、他のDAOに外部サービスを使用するように、単に名前SqlDaoFactoryをより適切な名前に変更し、そこにメソッドを含める必要がありますか?GetCompanyDao()または、これを達成するための別の方法はありますか?

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

c# - 静的プロバイダ ディクショナリの設計

現在使用している現在の WCF サービスを再考しています。さまざまなデータベースへの XML のロードを多数行っています。XML データとして格納できる場合もあれば、行セットとして格納する必要がある場合もあります。

そのため、このサービスを再設計して、さまざまなプロバイダーを受け入れるようにしています。私の最初の考えは、古典的な抽象工場でしたが、今は疑問に思っています。基本的に、サービス クラスには 1 つの操作コントラクト メソッド、Load があります。しかし、私には、Load が呼び出されるたびに新しいプロバイダー インスタンスを作成するのはばかげているように思えます。

現在:

次のように変更を考えています。

これは良いアプローチですか?私はプロバイダーをキャッシュするというアイデアが好きで、より効率的だと思います...しかし、私は時々明白なことを見落としがちです。あなたの考えを聞かせてください!