//工厂类必须有:1接口、2、实现接口的类 3、返回接口的工厂
//对象返回的是接口,也是多态。
public class Factory {
public static FruitInterface productionFruit(String name){
//返回的是接口
FruitInterface ff = null;
//获得当前包路径
//静态方法里面不能用this。
//static表示静态属性因为不能在静态方法调用非静态。this表示当前属性。
String packName = new Factory().getClass().getPackage().getName();
// 通过反射获取对象
try {
ff = (FruitInterface)Class.forName(packName+"."+name).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ff;
}
}
//main函数
package com.test;
public class FruitMain {
public static void main(String[] args) {
FruitInterface fruit = Factory.productionFruit("Apple");
fruit.dead();
FruitInterface fruit2 = Factory.productionFruit("Orange");
fruit2.grow();
}
}
//orange实现类
package com.test;
public class Orange implements FruitInterface {
@Override
public void dead() {
System.out.println("orange dead");
}
@Override
public void grow() {
System.out.println("orange grow");
}
}
package com.test;
//apple实现类
public class Apple implements FruitInterface{
@Override
public void dead() {
System.out.println("apple dead");
}
@Override
public void grow() {
System.out.println("apple grow");
}
}
package com.test;
//接口
public interface FruitInterface {
void grow();
void dead();
}