2

タイトルがわかりにくいかも。私が達成しようとしていることを明確にしましょう。

クラスを基本にする必要があります:

  • BaseProperties
  • ベースの問題

BaseProperties には、数学の問題の生成に関するデータが含まれています。たとえば、上の画像では、BasicAdditionProperties に Addend1 と Addend2 が含まれています。この 2 つのオブジェクトは、生成された値の範囲を認識して BasicAdditionProblem を表します。

したがって、これは単なるアイデアです.抽象クラスをファクトリに渡すことになっていると思いますが、これが問題を生成するはずです(この場合はBasicAdditionProblem)。

これらの値を基本クラスとして渡すことをお勧めします。そして、私の主な疑問は、オブジェクト BaseProperties をファクトリに渡すとき、常にオブジェクトをキャストする必要があるかということです。

または、このシナリオをモデル化するためにどのようなアイデアを実装できますか? それとも、具体的なファクトリへのマッピングとして維持および使用される静的ファクトリが必要ですか? 前もって感謝します。

ここに画像の説明を入力

4

2 に答える 2

1

クラスで抽象CreateProblem()を定義します。BasePropertiesこのメソッドを一般的に使用して、それぞれの具体的な Properties サブクラスが独自の Factory メソッドを提供できるようにすることができます。

WebRequestこれは、サブクラスのインスタンスを使用して呼び出すのと似てGetResponse()おり、対応する のサブクラスを返しますWebResponse

この分散抽象ファクトリ アプローチにより、プロパティ/問題のペアをシステムに簡単に追加できます。これは、2 つをマップするコードがこれら 2 つのクラスにのみ含まれているためです。


aと aPropertyProblemFactoryを定義する完全な Abstract Factory 実装を使用することもできます。したがって、あなたの例では、一致するセットを作成する方法を知っているでしょう。ただし、これにより、プロパティ/問題のペアごとに追加のクラスを定義する必要があります。また、 current/selected を使用し、それを使用して を作成し、すぐに同じファクトリを使用して一致する を作成するクラスがある場合にも最適に機能します。ファクトリへの参照を手放し、 への参照だけを持つと、適切なファクトリを再配置して を作成するのが難しくなります。CreateProperties()CreateProblem()AdditionFactoryPropertyProblemFactoryPropertiesPropertyProblemFactoryProblemPropertiesProblem. (これは、オブジェクト タイプをファクトリにマップする別のクラスで対処できますが、複雑さが増します。したがって、この種の状況では、最初に提案したアプローチの方が適しています)。

于 2012-07-05T19:24:33.787 に答える
0

これには複数の解決策があります。それは、どのようにプログラムしたいかによって異なります。

抽象クラスの抽象メソッドは、抽象クラスを継承するすべてのクラスで処理する必要があります。このようにして、キャストせずにファクトリで抽象メソッドを簡単に呼び出すことができます。

ただし、特定の 1 つのクラスだけから大量のデータを使用する必要がある場合は、そのための抽象メソッドを作成するのは賢明ではなく、単純にオブジェクトをキャストする必要があります。

つまり、どれだけのクラスが BaseProperties から継承し、それらのクラスでどれだけのデータが同じであるかにすべて依存します。

于 2012-07-02T00:44:49.907 に答える