工厂化生产:定义一个用于创建对象的接口,让子类决定实例化哪个类
举个栗子:
首先是接口:
ICar接口:
public interface ICar {
public String getName();
}
其次是实体类(继承了接口):
QQ:
public class QQ implements ICar {
@Override
public String getName() {
System.out.println("this is QQ===");
return null;
}
}
BMW:
public class BMW implements ICar {
@Override
public String getName() {
System.out.println("this is BMW===");
return null;
}
}
然后是工厂类Factory:
import static javafx.scene.input.KeyCode.T;
public class Factory {
public static ICar getInstance(String name){
// //第一种(入门)
// //工厂里面定死只有 指定的类 :“BMW”&“QQ”
// if("BMW".equals(name)){
// return new BMW();
// }else if("QQ".equals(name)){
// return new QQ();
// }
// return new BMW();
//第二种
//工厂里面可以生产 指定类型 的接口
ICar iCar=null;
try {
Class clazz =Class.forName(name);
iCar=(ICar) clazz.newInstance();
} catch (Exception e){
e.getStackTrace();
}
return iCar;
}
//第三种
//可以针对任何实体类
public static <T> T getInstances(String name,Class<T> clazz){
T t = null;
try {
t=(T)Class.forName(name).newInstance();
return t;
}catch (Exception ex){
ex.printStackTrace();
}
return t;
}
}
最后是测试类FactoryTest:
public class FactoryTest {
public static void main(String[] args){
// ICar iCar=Factory.getInstance("QQ");
// iCar.getName();
ICar iCar=Factory.getInstance("com.wzy.interview.Factory.QQ");
iCar.getName();
ICar iCar1=Factory.getInstances("com.wzy.interview.Factory.BMW",BMW.class);
iCar1.getName();
}
}
测试结果: