工廠方法是工廠模式三種表現形式中的一種,另外兩種是簡單工廠和抽象工廠,三者的差異主要在於抽象程度的不同,實際上簡單工廠和工廠方法很相似,差別只是簡單工廠沒有提供工廠接口。下面先給出工廠方法的示意圖:
如圖所示,工廠方法模式需要定義一個用於創建對象的接口,然後讓子類決定實例化哪一個類,其一個顯著的特徵就是使一個類的實例化延遲到其子類。給出代碼更容易理解:
public interface IFactory {
public IProduct createProduct();
}
public interface IProduct {
public void productMethod();
}
public class Product implements IProduct {
@Override
public void productMethod() {
System.out.print("生產具體的產品");
}
}
public class Factory implements IFactory {
@Override
public IProduct createProduct() {
return new Product();
}
public static void main(String[] args) {
IFactory factory = new Factory();
IProduct product = factory.createProduct();
product.productMethod();
}
}
從代碼可以清晰的看到具體的產品由具體的工廠類進行生產,且產品的細節對客戶端來說是透明的,客戶端只知道產品接口,也就是說當要生產另外一種產品或者原來產品生產方法需要修改時,將直接編寫新的工廠類來生產新的產品或者在原來的工廠類上進行修改,而這一切客戶端都不需要參與,調用接口方式與修改之前一致,這在一定程度上降低了耦合性和提高了程序的可擴展性。
工廠方法模式的缺點在於每次需要新的產品時就需要涉及新的對應的工廠類,也就是說類的數量是成對增長的,當系統量級大了之後這無疑將提升程序的複雜性。另外,由於客戶端知道的都是比較抽象的工廠接口和產品接口,這會在某種程度上模糊程序的可理解性。