Когда я впервые изучал C ++, я наткнулся на эту статью о фабриках, Pluggable C ++ Factory , и с тех пор, как я использовал этот шаблон для своих фабрик в C ++.Так вот, я недавно занимался Java, и не раз мне хотелось использовать фабрику, но я не могу найти способ расширить фабрику во время компиляции.
Любая реализация фабрики, о которой я могу думать в Java, включает в себя рассказ фактического класса фабрики обо всех базовых классах, что является довольно неоптимальным.
Итак, как я могу заставить все подклассы класса регистрироваться в статическом словаре во время компиляции / создания программы?
EDIT Похоже, мой вопрос былслишком расплывчатоПозвольте мне уточнить,
В 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();
}
Derived.java
class Derived extends Factory {
public Derived() {super(DERIVED_INDEX);}
private static Derived tmp = new Derived();
public Foo makeFoo() {return new FooImplementation();}
}
Фабрикане будет обновляться со ссылкой на Derived (и, следовательно, не будет создавать производные экземпляры), если я сам не зарегистрирую его вручную, что лишает цели наличия статического члена tmp.