0

我即将在java中实现工厂模式。我在工厂里有一个像 HashMap 这样的地图,我会用我选择的键添加所有具体的实现。密钥由 MyAbstract 类中的抽象方法 getImplName() 定义。

我的要求是当有人扩展 MyAbstractClass 并定义 getImplName() 时,必须将键值对自动添加到工厂映射中,而不是手动执行此操作的代码。这可能吗 ?我在考虑使用自定义注释。让我知道你的建议

4

2 回答 2

2

在您的抽象类的构造函数中,您应该能够调用 getImplName() 并将其添加到您的地图中(假设您的地图有一个已知实例,否则需要传入)。

或者,您可以在构造函数中添加参数以获取所需的值。

于 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 回答