を持つ被験者はすでにそれを言う:OOP-デザイン:インタフェース・メソッドの実装に依存するパラメータ
私は、次の設計の問題について今考えています:私は様々な方法が含まれている特定のタイプのオブジェクトのためのインタフェースを定義。 今、私は問題があります。このインタフェースの実装には、別の/別のメソッドパラメータが必要です(実装されているため、これが必要になります)。すべてインターフェイスに組み込むことができません。 - 実施。
インターフェイスの実装に独自のプロパティファイルが付属していて、そこから追加のパラメータを読み込むことができますが、これらのパラメータを実行時に渡す必要がある場合はどうなりますか? DocumentBuilderFactoryのようなJDK-クラスは、この は、この問題を解決するための実行可能なアプローチのように思えるsetAttribute(String attName, Object attValue)
のような方法を提供することにより、非常に似た何かをやっているので、 -
Map<String, Object> parameters
に渡すと考えることができます。 それにもかかわらず、私は他の人がこのような問題をどのように解決するのか、別の考え方に興味がありますか?
私の場合、私はベースインターフェイスのメソッドからNotImplementException
を投げなければならないため、インターフェイスから派生してメソッドを追加したくありません。
はUPDATE:
地図・アプローチの最終的な問題何ができますか?クラスを実装すると、追加のパラメータを使用できない場合でも、クラスを完全に無視することができます。 Mapは、目的のパラメータ名が含まれているかどうかをチェックし、値の型をチェックし、有効な場合は使用し、そうでない場合は例外をスローします。 私も..一般的なアプローチであると思われるので、これは、抽象クラスJAXBContextのために使用されて見てきました
UPDATE:私は見ていけないため、マップのアプローチのために行くことに決めた
明白な欠点があり、JDKでも使用されています。(はい、これは必ずしも意味があるとは限りません:) 私はこの質問に対する回答を受け入れることができないので、私はちょうどupvoteします。あなたのご意見ありがとうございます!
に関して、
--qu
この情報は、メソッドが必要とするものか、オブジェクトがそのアクションを実行するために必要なものですか?具体的な例を挙げてください。 ** Map **を使用することは、デザインの決定には恐ろしいものです。 –
@MaurícioLinhares私は、このソリューションは最適ではないことを認識しています(なぜこの質問をしたのですか)。しかしDocumentBuilderFactoryを例に取ってみましょう。インターフェイスはすべての可能なDOMパーサーで同一ですが、DOMパーサー実装では異なる機能/あなたが決してインタフェースに取り入れることのできないパラメータを、実行時に何らかの方法でそれらのパラメータを渡す方法が必要です。私はJDKがこれを解決する方法を述べました... – quaylar
これは**初期化**プロセスです。工場の唯一の目的は、その作業を行う準備ができている新しいオブジェクトを作成することです**インターフェース**はまったく変更されません。あなたが望むのは何か他のものです。これを**インターフェースメソッド**に追加したいと思っています。あなたが望むものが実際に初期化の間にオブジェクトをセットアップするならば、これらのオブジェクトをコンストラクタのパラメータにしてください。 –