public abstract class Factory {
public abstract <T> T createProduct(Class<T> clazz);
}
public abstract class Product {
public abstract void method();
}
public class ConcreteFactory extends Factory{
Product product=null;
@Override
public <T> T createProduct(Class<T> clazz){
try {
product=(Product) Class.forName(clazz.getName()).getConstructor().newInstance();
}
catch (Exception e){
e.printStackTrace();
}
return (T)product;
}
}
public class ConcreteProduct extends Product{
@Override
public void method() {
System.out.println("hello world");
}
}
public class Test {
public static void main(String[] args){
try {
Factory factory=new ConcreteFactory();
Product product=factory.createProduct(ConcreteProduct.class);
product.method();
}
catch (Exception e){
e.printStackTrace();
}
}
}
