1.工廠方法模式定義
定義一個用於創建對象的接口,讓子類決定具體實例話哪一個類。
2.通用實現方式
工廠方式通用實現方式類圖如下:
其中Product定義了產品的共性,是對事物的抽象,Creator為抽象創建類,即抽象工廠,具體如何創建實例由實現類決定。代碼如下所示:
Product類:
public abstract class Product {
/**
* 產品名稱
*/
private String name = "";
/**
* 產品價格
*/
private String price = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
@Override
public String toString() {
return "Product{" +
"name='" + name + '\'' +
", price='" + price + '\'' +
'}';
}
}
Creator類:
public abstract class Creator {
/**
* @param c 需要具體創建的具體產品
* @param <T> Product的實現類
* @return 實例對象
*/
public abstract <T extends Product> T create(Class<T> c);
}
具體的實現類:
public class ConcreteCreator extends Creator {
@Override
public <T extends Product> T create(Class<T> c) {
Product product = null;
try {
product = (Product) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
}
return (T)product;
}
}
對於工廠方法模式有許多擴展,其中之一就是當一個模塊中只需要一個工廠的時候,其實可以對上面進行簡化,直接將create方法定義為靜態方法,相當於一個util類,代碼如下:
public class ConcreteCreator {
public static <T extends Product> T create(Class<T> c) {
Product product = null;
try {
product = (Product) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
}
return (T)product;
}
}
這種被稱為簡單工廠模式。