私が持っているabstract class A
抽象メソッドを宣言しているがdoStuff
。現在、を継承しA
て実装するクラスが多数ありますdoStuff
。
クラスのインスタンスはAFactory
、ユーザー入力に基づいて実行時に初期化されます。元々、すべてのクラスには同じ単一のパラメーター(ユーザー入力)がありました。しかし今、私はA
ニーズを継承する新しいクラスだけである追加のパラメーターを持っています。
だから私はそれを次のロジックで分解します:
ユーザー入力(
AFactory
もちろん使用)に基づいてインスタンスを生成するインタープリタークラスは、この追加のパラメーターを認識していませんでした。- それをクラスインタープリタクラスにプッシュしようとすると、本当に厄介なことになります。それは、いつファクトリーに渡すかを知らなければならず、そもそもファクトリーを持つという全体の目的に反するためです。
- それを何かに使うかもしれないと期待して盲目的にファクトリーに送ることも、かなり醜いようです。
私の現在の解決策:一方、にリファクタリング
A.doStuff(Param param)
することにしましたA.doStuff(AParams params)
。AParams
必要なパラメータをすべて保持doStuff
でき、興味がない場合は無視できます。これは私にとっても少し厄介なようで、WIN32APIで構造体を送信することを抑制します。この構造体は、醜く役に立たない多くのパラメーターを保持する可能性があり、私はそれが好きではありません。
この問題に取り組むよりエレガントな方法はありますか?それとも私が見落とし、これを解決したいくつかのデザインパターン?
注:
- Java 1.7を使用しています
- クラスの名前は、理論上の設計上の問題を強調するためにばかげていますが、実際には、わかりやすく意味のある名前が付けられています。
- 私はかなり多くのことを検索しましたが、(このコードを
X
スローしている理由とは対照的に)特定の抽象的な理論的な問題をWebで検索するのは非常に難しいことがわかったException
ので、とにかく尋ねることにしたので、これが複製。
編集1:
- 明確化:サブクラス固有の引数を
doStuff
メソッドに渡す必要があります。
編集2:
EntryPoint
それmain
を呼び出しInterpreter
て、パラメーターとして追加のパラメーターを現在受け取っていないものを呼び出し、ファクトリーを呼び出すことがわかっています。追加のパラメーターは、UserInput
(残念ながら変更できない)で説明されていない別のタイプのユーザー入力に由来します。
doStuff
メソッドに渡す必要があるかどうかを明確にできますか?