我有一个抽象的Command
课程。从某个类Command
创建的每个Fetcher
类都需要赋予某些属性。通常这看起来像工厂模式 - Fetcher
创建CommandFactory
,在创建Command
时会为其做好准备。然而,大约有十几个派生类,我没有看到如何在没有为每个具体类具有不同的具体工厂的情况下执行此操作,或者在每次新的createConcrete1Command
时必须扩展的不同方法Command
。 1}}类已创建。对此有什么策略吗?
答案 0 :(得分:1)
我发现这种情况的解决方案如下:
构造
public BaseClass(Parameters p); // can be expanded and endowed as necessary; essentially anything a constructor can do can happen here.
所有派生类当然都会以Parameters
作为参数,但Parameters
可以根据需要进行扩展,而无需触及任何派生类的构造函数。
答案 1 :(得分:0)
您可以尝试使用Class.forName(String)
和Class.newInstance
以编程方式创建新实例。虽然一般来说,我发现由于缺少元类,工厂模式总是适用于Java中的样板代码。
类似于(模块异常处理并假设每个Foo类都有一个FooCommand类)
public class AbstractFoo {
public ICommand createCommand() {
return Class.forName(this.getClass()+"Command").newInstance();
}
}
并在createCommand()
上调用Fetcher extends AbstractFoo
会创建FetcherCommand
的实例。
这就是你要找的东西吗?