0

Javaでファクトリパターンを実装しようとしています。ファクトリに HashMap のようなマップがあり、選択したキーを使用してすべての具体的な実装を追加します。キーは、MyAbstract クラスの抽象メソッド getImplName() によって定義されます。

私の要件は、誰かが MyAbstractClass を拡張して getImplName() を定義する場合、手動でこれを行うコードではなく、キーと値のペアをファクトリ マップに自動的に追加する必要があることです。これは可能ですか?カスタム注釈の使用を考えていました。あなたの提案を教えてください

4

2 に答える 2

2

抽象クラスのコンストラクターでは、 getImplName() を呼び出してマップに追加できるはずです (マップの既知のインスタンスが 1 つある場合は、それを渡す必要があります)。

または、コンストラクターにパラメーターを追加して、必要な値を取得することもできます。

于 2012-07-02T13:29:15.287 に答える
0

ファクトリ要素がファクトリ メソッドを認識すべきかどうかについては議論があります。
要素にファクトリを認識させたい場合は、次のアプローチをお勧めします。

public abstract class MyAbstractClass {
  public MyAbstractClass(MyFactory factory) {
       factory.addElement(getImplName(),this);
  }

  public abstract String getImplName();
}

public class MyTestClass extends MyAbstractClass {
  public MyTestClass(MyFactory factory) {
    super(factory);
  }
}

MyFactory は、HashMap を内部フィールドとして持つファクトリです。
このように、MyAbstractClass を拡張するプログラマは、スーパー クラス CTOR を呼び出してクラスのオブジェクトをファクトリに追加する CTOR を提供する必要があります。

于 2012-07-03T05:30:26.670 に答える