假设我有一个Java接口Blender.java
,其中包含各种实现Cuisinart.java
,Oster.java
,Blendtec.java
等等。现在我想写一个这样的程序:
public class Blendifier {
// ...
public static void main(String... args) {
Blender blender = new Cuisinart();
blender.blend();
}
}
但是现在如果我想使用Blendtec
而不是Cuisinart
,我必须打开源代码,更改代码并重新编译。
相反,我希望能够在运行程序时指定要动态使用的Blender
,方法是将我想要的类名称作为命令行参数。
但是,如何从包含类的 name 的String转到构建该类的实际实例?
答案 0 :(得分:1)
如果您不想解决Java反射问题,可以编写一个简单的静态工厂方法,该方法接受String并返回相应的对象。
public static Blender createBlender(String type){
switch(type){
case "Cuisinart": return new Cuisinart();
case "Oster": return new Oster();
//etc
}
}
然后你只需将你的命令行参数传入它,你就可以拥有你需要的任何Blender。
唯一可能的设计问题是你必须为每个实现Blender的类输出一行,所以如果你以后添加更多类型,你必须更新该方法。
答案 1 :(得分:0)
您有几种方法可以实现这一目标:
e.g。 if-else构造
Blender blender = null;
if (args[0].equals("Cuisinart")) {
blender = new Cuisinart();
} else if (...)
其中args [0]是您的第一个命令行参数。