- 抽象产品类
public abstract class AbstractProduct {
abstract void method();
}
- 具体产品类
public class ProductOne extends AbstractProduct {
@Override
void method() {
System.out.println("Product ONE");
}
}
public class ProductTwo extends AbstractProduct {
@Override
void method() {
System.out.println("Product TWO");
}
}
- 抽象工厂类
public abstract class AbstractFactory {
// public abstract AbstractProduct Product(String type);
public abstract <T extends AbstractProduct> T Product(Class<T> tClass);
}
- 具体工厂类
public class SpecificFactory extends AbstractFactory {
//通过映射拿到Class的Instance、
@Override
public <T extends AbstractProduct> T Product(Class<T> tClass) {
AbstractProduct product=null;
try {
product=(AbstractProduct) tClass.forName(tClass.getName()).newInstance();
}catch (Exception e){
e.printStackTrace();
}
return (T) product;
}
// 原始的需要传类型过来进行判断生产那种产品
// @Override
// public AbstractProduct Product(String type) {
// if ("ProductOne".equalsIgnoreCase(type)){
// return new ProductOne();
// }else if ("ProductTwo".equalsIgnoreCase(type)){
// return new ProductTwo();
// }else {
// System.out.println("type is unknow");
// return null;
// }
// }
}
Client客户端调用
public class MyClass {
public static void main(String[] args ){
AbstractFactory factory=new SpecificFactory();
AbstractProduct productOne=factory.Product(ProductOne.class);
if (productOne!=null) {
productOne.method();
}
AbstractProduct productTwo=factory.Product(ProductTwo.class);
if (productTwo!=null){
productTwo.method();
}
// 此处为原始传值区分生产那种产品(非空判断么、null pointer 多、你懂得、、)
// AbstractFactory factroy=new SpecificFactory();
// AbstractProduct productOne=factroy.Product("ProductOne");
// if (productOne!=null){
// productOne.method();
// }
// AbstractProduct productTwo=factroy.Product("ProductTwo");
// if (productTwo!=null){
// productTwo.method();
// }
}
}
注:注释部分为对比代码、