Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++工厂> java工厂? 当我第一次学习C++时,我偶然发现了一篇关于工厂的文章, 而且自从我在C++中使用了这个模式。现在,我最近一直在做Java,不止一次我想使用工厂,但我似乎无法找到在编译时扩展工厂的方法_Java_C++_Factory Pattern - Fatal编程技术网

C++工厂> java工厂? 当我第一次学习C++时,我偶然发现了一篇关于工厂的文章, 而且自从我在C++中使用了这个模式。现在,我最近一直在做Java,不止一次我想使用工厂,但我似乎无法找到在编译时扩展工厂的方法

C++工厂> java工厂? 当我第一次学习C++时,我偶然发现了一篇关于工厂的文章, 而且自从我在C++中使用了这个模式。现在,我最近一直在做Java,不止一次我想使用工厂,但我似乎无法找到在编译时扩展工厂的方法,java,c++,factory-pattern,Java,C++,Factory Pattern,我在Java中想到的工厂的任何实现都涉及到告诉实际工厂类所有底层类,这是相当次优的 那么,如何让一个类的所有子类在编译时/程序实例化时在静态字典中注册它们自己呢 编辑 我的问题似乎太模糊了。让我详细说明一下 在Java中,如果我尝试像这样复制此模式: Factory.java abstract class Factory { private static Dictionary<int, Factory> dict; public Factory(int index) { dic

我在Java中想到的工厂的任何实现都涉及到告诉实际工厂类所有底层类,这是相当次优的

那么,如何让一个类的所有子类在编译时/程序实例化时在静态字典中注册它们自己呢

编辑 我的问题似乎太模糊了。让我详细说明一下

在Java中,如果我尝试像这样复制此模式: Factory.java

abstract class Factory { 
private static Dictionary<int, Factory> dict;
public Factory(int index) {
  dict[int] = self;
}
public Foo getFoo(int index) {return dict[index].createFoo();}
protected abstract Foo makeFoo();
}

工厂不会使用对派生的引用进行更新,因此不会创建派生实例,除非我自己手动注册它,这违背了拥有静态tmp成员的目的。

我认为该类可以帮助您。

考虑使用反射实现工厂方法。

您可能会发现该库很有用

使用反射,您可以查询元数据,例如:


使用这个库,你可以定义一个接口和一个工厂,通过搜索这些实现,可以创建接口的任何一个实现:

不认为这是C++的标记,因为引用的文章中的每一个都被简单地翻译成java,问题到底是什么?
class Derived extends Factory {
public Derived() {super(DERIVED_INDEX);}
private static Derived tmp = new Derived();
public Foo makeFoo() {return new FooImplementation();}
}
* get all subtypes of some type
* get all types/methods/fields annotated with some annotation, w/o annotation parameters matching
* get all resources matching matching a regular expression