Java 如何避免多态工厂模式中的大量样板文件
我有一个抽象的Java 如何避免多态工厂模式中的大量样板文件,java,design-patterns,Java,Design Patterns,我有一个抽象的命令类。从某个类(Fetcher)创建的每个命令类都需要赋予某些属性。通常这看起来像一个工厂模式-Fetcher创建一个CommandFactory,它将在创建时准备命令。然而,大约有十几个派生类,我不知道如何做到这一点,而不为每个具体类使用不同的具体工厂,或者在每次创建新的命令类时必须扩展的不同方法createConcrete1Command。有什么策略吗?您可以尝试使用Class.forName(String)和Class.newInstance以编程方式创建新实例。虽然一般来
命令
类。从某个类(Fetcher
)创建的每个命令
类都需要赋予某些属性。通常这看起来像一个工厂模式-Fetcher
创建一个CommandFactory
,它将在创建时准备命令。然而,大约有十几个派生类,我不知道如何做到这一点,而不为每个具体类使用不同的具体工厂,或者在每次创建新的命令类时必须扩展的不同方法createConcrete1Command
。有什么策略吗?您可以尝试使用Class.forName(String)
和Class.newInstance
以编程方式创建新实例。虽然一般来说,我发现由于元类的缺乏,工厂模式总是适合于Java中的样板代码
比如(模块异常处理,并假设每个Foo类都有一个FooCommand类)
并在Fetcher extensed AbstractFoo
上调用createCommand()
,创建FetcherCommand
的实例
这就是你要找的吗 我发现解决这种情况的方法如下:
建造商:
public BaseClass(Parameters p); // can be expanded and endowed as necessary; essentially anything a constructor can do can happen here.
当然,所有派生类都将使用参数
作为参数,但是参数
可以根据需要进行扩展,而无需接触任何派生类的构造函数。我不确定我是否理解,但是如果每个命令类都有大量样板代码,您可以提取抽象命令类的公共性。从您的描述中不清楚如何知道要创建哪个命令子类。但是,一旦解决了这个问题,也许可以将工厂方法作为每个命令子类的静态方法。公共功能可以保存在命令基类的一个或多个方法中。这样,当您创建下一个命令子类时,您只需要在新类中实现新的工厂方法,而不需要接触任何现有代码。这太棒了。顺便问一下,您是否意识到“命令”只不过是一个不属于类的“函数”或“方法”调用(即尝试在OO语言中进行函数编程)
public BaseClass(Parameters p); // can be expanded and endowed as necessary; essentially anything a constructor can do can happen here.