問題タブ [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.
java - Java の抽象ファクトリ - 拡張するには?
core
私はUIコンポーネントをAbstractFactory
担当するJavaライブラリを使用しています。MyApplication はコアを使用し、UI をカスタマイズします。したがって、MyApplication の起動時に、MyFactory を AbstractFactory のインスタンスとして設定します。
私の問題は、たとえば MyApplication で JList を作成する必要があることですが、public JList createJList()
コア ライブラリを変更できないため、AbstractFactory に追加できません。
何をすればよいでしょうか?
ケース 1:
常にMyFactory.getMyFactoryInstance()
MyApplication、新しい静的フィールドで呼び出します。
ケース 2:
常にMyFactory.getMyFactoryInstance()
MyApplication を呼び出し、キャストを使用する
ケース 3: 2 つのファクトリを使用します。JButtons と JLabels には AbstractFactory を使用し、JList には SomeOtherFactory を使用します。
ケース 4:何か良いことはありますか? 私は何かを見落としているように感じます。
java - Java インターフェイス、クリエーター パターン、および「getInstance()」メソッドまたは同等のメソッド
私の問題は、Java のインターフェイスが静的メソッドを許可していないという事実に起因することを述べることから始めたいと思います。SO でのこの理由についての議論がありました (ここでは、たとえば)。だから、それにこだわらないようにしましょう。インターフェイスがそれ自体のインスタンス (むしろその実装) を作成し、それを返す方法を探しています。Singleton パターン、Factory および AbstractFactory パターンをいじっても、まだ目標を達成できません。
私がしようとしていることを詳しく説明するために-これが私のインターフェースです:
そして、これが私のビジネス ロジック レイヤーです。
私は次のようなファクトリーパターンを使用しようとしました:
ただし、これには、ビジネス ロジック層が実装クラスを認識している必要がありNoteDataStoreFactoryImpl
ます。
どうすればこれを回避できますか? 使用する正確な実装クラスに関して BusinessLogicLayer を暗闇に保つにはどうすればよいですか?
編集:私の問題のより詳細な背景
回答のいくつかは、Spring などのフレームワークの使用を示唆しています。残念ながら、このアプリケーションはさまざまなモバイル プラットフォーム (Android、Blackberry、JavaME) を対象としているため、そうすることができません。元の質問でこれを明確にする必要がありました-そうしなかったことをお詫びします。
私の主な意図は、プラットフォーム間でアプリを提供することです。UI、データベース アクセス、HTTP トランスポート レイヤーなどは、プラットフォームごとに特別にコーディングする必要があります。ただし、ビジネス ロジックは単純なので、すべてのプラットフォームで共通のレイヤーを保証できます。ビジネス ロジック層を JAR ライブラリとして配布する予定です。解析およびフレーミング レイヤー (JSON/XML 用) も同様です。
これについては SO で既に議論されています (私がこの道をたどるべきかどうかについて) - Logic Code reuse。ただし、これで問題ないと仮定し、レイヤード アプローチを進めて、コード内で 1 つのレイヤーを共通にするつもりです。今、私の状況は私が持っているようなものです:
- 共通のビジネス ロジック層。
NoteDataStore
プラットフォーム固有のデータ層 (インターフェースで表される)- プラットフォーム固有のアプリケーション コア レイヤー (コントローラー、そう呼ぶ場合もあります)。
Factory パターンなどを使用する場合、各プラットフォームに固有のレイヤーを使用する余裕があることに注意してください。NoteDataStore
したがって、ファクトリ メソッド/クラス自体が実装クラスについて知ることができます。ただし、ビジネス ロジック層は実装クラスを認識しない必要があります。
さまざまなレイヤーの一般的な使用法は次のとおりです。
このシナリオの処理方法に関する情報はありますか?
java - デザインパターンオブジェクトの初期化で一連のIf..elseを削除する必要があります
複数の部門があり、部門ごとに個別の処理クラスがあるアプリケーションを作成しています。各部門と部門の処理は、別々のクラスで表されます。
そのため、Javaのmainメソッドは、ifelseラダーのシリーズのように見えます。
元々書かれたクラスをあまり変更せずに、後で部門とその処理クラスを追加できるように、より柔軟にする方法はありますか?
Abstract Factoryパターンについて読みましたが、それ以外の解決策はありますか?
objective-c - Objective-C クラス クラスタとプライベート クラス初期化子
通常、私は Cocoa の良い市民として、id
後で簡単にサブクラス化できるように、型を返す初期化子 (つまり、ジェネリック オブジェクトへのポインター) を作成します (ただし、99% の場合は必要ありません)。
今、私は独自のクラス クラスター (単一のパブリック クラスで制限された多数のプライベート クラス) を作成しています。id
質問: ジェネリックポインターを返すようにプライベート クラスのイニシャライザーを定義する必要がありますか?
または、次のようなプライベート クラス自体へのポインター:
java - Java ジェネリックとデザイン パターン: ジェネリック型への参照をパラメーター化しないことは常に悪いことですか?
この質問は、私の最後の質問に部分的に関連しています。
ジェネリック オブジェクトのコレクションを表すジェネリック クラスがあります。
私の設計では、これらのオブジェクトのコレクションは、抽象クラス アプローチを通じてクライアント クラス (これを CollectionBuilder と呼びましょう) によって構築されます。
ジェネリック コレクションは、次のように構築する必要があります。
わかりました。これで大丈夫です。CollectionBuilder は、指定する一般的な具象型 (この場合は Double) を認識しており、正しくビルドできます。これを警告なしでコンパイルでき、すべて正常に動作するはずです。
ここで、ジェネリックとプログラムの設計の両方に関連する質問があります。
CollectionBuilder によって構築されたコレクションを使用する必要があるアプリケーション内の別のクラスがあります (このクラスを UserClass と呼びましょう)。ユーザークラス:
MyCollection<MyObject<Double>>
特定の具象型がそのコレクション (または)であることを知る必要はありませんMyCollection<MyObject<Integer>>
。- MyCollection インターフェイスで定義されたいくつかのメソッドを呼び出して、これらのコレクションに対していくつかの操作を実行します。
- ジェネリック型を追加したくありません。
説明されている状況では、UserClass 内のジェネリック クラス MyCollection をパラメータ化しないのは悪い考えですか?
ジェネリック パラメータを指定しないと、Java コンパイラは常に警告を表示します。とにかく UserClass の内部からは、具体的なパラメーターがわからず (知りたくありません)、「?」で宣言することさえあります。MyCollection でメソッド foo を呼び出せないでください。
したがって、質問は次のとおりです。
- ジェネリック型への参照をパラメータ化しないことは常に悪いことですか?
- 1 の答えが NO の場合、それをしないのは正しい状況ですか?
- 1 の答えが YES の場合、ジェネリック型を知らなくても UserClass 内から MyCollection メソッドを使用するにはどうすればよいですか?
- 私のデザインは悪いですか?
明確になったことを願っています。私は何日もこの問題に苦労してきましたが、わかりません。私を助けてください。
java - 依存性注入とファクトリデザインパターンの主な違いは何ですか?
簡単に説明できますか:依存性注入とファクトリデザインパターンの主な違いは何ですか?
さらに:コード例によって非常に簡単に違いを示すことは可能ですか?
ありがとう
design-patterns - 単体テストにおけるファクトリ/アブストラクト ファクトリ デザイン パターンの使用
ユニット テスト ケースを記述するための Factory / Abstract Factory Design Patterns は非常に効果的であると言われていますが、それを明確に示すチュートリアルを見つけることができませんでした。したがって、誰かが既存のチュートリアルを教えてくれるか、ここで疑似コードと説明を教えてくれれば非常に役に立ちます:)
java - Java のジェネリック型を持つ AbstractFactory: 設計上の問題
抽象ファクトリ パターンに応じて、次の 2 つのインターフェイスがあります。
GenericObject を実装する抽象クラスがありますが、まだ具体的な型を認識していません (Number に対する一般的な操作のみを行います)。
次に、汎用パラメーター置換を実行する一連の具象クラスの拡張があります。
ここで、ファクトリの実装内から具象型を構築します。これは GenericObjectInterface を実装していますが、ジェネリック パラメータが失われています。
GenericObjectInterface を実装した obj を返したいのですが、どうすればよいかわかりません。どうすればこれを解決できますか?
私はファクトリを抽象化することに慣れていますが、ジェネリックで使用したことはありません。パターンの解釈に誤りがありますか?
oop - Factory パターンによって返されるオブジェクトとは異なるプロパティを設定する方法は?
具体的なファクトリによって返されるオブジェクトのプロパティを設定する方法について疑問に思っていました。ファクトリは、プロパティ A と B を持つ objectA を返すことができますが、プロパティ X、Y、Z を持つ objectB を返すこともできます。
クライアントは objectA と objectB が継承するインターフェイスしか知らないため、どのオブジェクトを扱っているかはわかりません。それで、私の質問は、これらのプロパティを設定するオブジェクト指向の方法は何ですか? classA と classB のすべてのプロパティを含む一種の設定クラスを導入する必要がありますか? しかし、これはオブジェクト指向ではありません。新しいクラスがある場合、設定クラスも更新する必要があるためです...
あなたが私の質問を理解し、私を助けてくれることを願っています:)
PS: それが問題なら、私は C# で作業しています
java - AbstractFactory 対 Bridge パターン
Bridge
パターンとその意図を学びました。抽象化をその実装から分離して、2 つが独立して変化できるようにします。
しかし、なぜAbstractFactory
同じことをすることができなかったのでしょうか?
が特定のブリッジを作成できることは知っていますが、私の質問は、抽象化と実装を分離するための の代わりのAbstractFactory
使用に関するものです。AbstractFactory
Bridge
AbstractFactory
とBridge
Patternの本当の違いを教えてください。