第一个版本
interface fruit{
public abstract void eat();
}
class Apple implements fruit{
@Override
public void eat() {
System.out.println("苹果");
}
}
class Orange implements fruit{
@Override
public void eat() {
System.out.println("橘子");
}
}
class Factor{
public static fruit getInstance(String ClassName){
if("Apple".equals(ClassName)){
return new Apple();
}else if("Orange".equals(ClassName)){
return new Orange();
}
return null;
}
}
public class Test {
public static void main(String[] args) {
fruit f = Factor.getInstance("Orange");
if(f != null)
f.eat();
else
System.out.println("没有该水果");
}
}
缺点:每次加一种水果,工厂类就要改变一次,所以请看第二个版本
第二个版本
interface fruit{
public abstract void eat();
}
class Apple implements fruit{
@Override
public void eat() {
System.out.println("苹果");
}
}
class Factor{
public static fruit getInstance(String ClassName){
fruit f = null;
try {
//通过反射获取对象,就不需要每增加一个水果类就要对工厂进行修改了
f = (fruit)Class.forName(ClassName).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return f;
}
}
public class Test {
public static void main(String[] args) {
fruit f = Factor.getInstance("test.Orange");
if(f != null)
f.eat();
else
System.out.println("没有该水果");
}
}