私が持っている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メソッドに渡す必要があるかどうかを明確にできますか?