0

次のシナリオで使用する正しいタイプのデザイン パターンについての洞察が必要です。

サードパーティの開発者がモジュールを作成して、システムに必要な小さな機能を提供できるようにする既存のフレームワーク。

機能の一部には、基本的に非常に単純な私のシステムのサブセットが含まれます。これにより、システムの特定のモデルで 2 つのプロパティが利用できるようになります。たとえば、「Customer」と言うと、2 つのプロパティは getName と getEmailAddress です。

現在、サードパーティの開発者は、これらの値を生成する非常に複雑なプロセスを持つ可能性のあるこれらの独自の実装を提供できますが、私のシステムは、これら 2 つのプロパティが利用可能でなければならないという事実だけに関心があります。

難しい部分は、サードパーティのモジュールコードが Customer モデルにどのように接続するかだと思います

4

3 に答える 3

1

CustomerInfo2 つの顧客プロパティを含むクラスと、CustomerInfoProviderこの固有のメソッドを含むインターフェイスを作成します。

CustomerInfo loadCustomerInfo();

ユーザーが直接提供するか、構成ファイルでこのインターフェースを実装する具象クラスの名前を構成することによって、フレームワークがこのインターフェースのインスタンスを受け入れるようにします。

後者の場合、 を使用してクラスをロードしClass.forName(...).newInstance()、結果を CustomerInfoProvider インターフェイスにキャストします。

于 2012-12-10T20:24:34.800 に答える
1

サードパーティの開発者がモジュールを作成して、システムに必要な小さな機能を提供できるようにする既存のフレームワーク。

これは、システムとクライアントのコードの間に契約があることを意味します。システムと対話する必要がある外部コードは、その契約を満たす必要があります。オブジェクト指向の用語では、インターフェイスはコントラクトであるため、必要なのはクライアントが実装する必要があるインターフェイスです。例:

public interface ICustomer{
   public String getName();
   public String getEmailAddress();
}
于 2012-12-10T20:27:20.533 に答える
0

実装を不透明に保ちたい場合は、ビジター。「不透明」とは、通常の手段を使用して拡張するために、バイナリまたはソース形式でユーザーがアクセスできないことを意味します。

それ以外の場合は、状況に応じて、集約/構成、仮想メソッド/抽象基本クラス、またはテンプレート メソッドのいずれかを選択します。

于 2012-12-10T20:21:38.793 に答える