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