关于工厂模式,本文就不详述了。大家可以百度。
基本的结构是这样的:
一个抽象产品(接口或者抽象类)
几个具体的产品类去实现这个抽象产品
一个工厂类
一个调用类
下面是示例代码:
抽象产品(接口)
public interface Product {
public void doSomething();
}
具体产品实现类
public class ProductA implements Product {
@Override
public void doSomething() {
System.out.println("Product A do something.");
}
}
public class ProductB implements Product {
@Override
public void doSomething() {
System.out.println("Product B do something.");
}
}
产品工厂类
public class ProductFactory {
public static void main(String[] args) {
}
public static Product createProduct(Class c) {
Product prod = null;
try {
prod = (Product) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
// TODO: handle exception
}
return prod;
}
}
工厂调用类
public class FactoryCaller {
public static void main(String[] args) {
Product prodA = ProductFactory.createProduct(ProductA.class);
prodA.doSomething();
Product prodB = ProductFactory.createProduct(ProductB.class);
prodB.doSomething();
}
}
关于这个模式的泛型化,就在于产品工厂类里面的那个createProduct()方法了。我们都知道Class是一个raw-type,这种类型在使用的时候是要给出一个类型限定的。否则,会有一个警告。
Class is a raw type. References to generic type Class<T> should be paramet