定制工厂模式实施

时间:2012-07-02 13:21:25

标签: java

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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将类的对象添加到工厂。