定義:
在工廠方法模式中,工廠父類負責定義創建產品對象的公共接口,而工廠子類則負責生成具體的產品對象,這樣做的目的是將產品類的實例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該實例化哪一個具體產品類。
爲何使用:
不需要設置一個工廠類實現所有產品的創建,而是把每個產品的實現交給對應的工廠去實現,也不用擔心實例的創建,將創建產品實現的實例與使用的實例分開。一個產品對應一個工廠,需要增加產品的時候就需要新建一個工廠。
缺點:
在添加新產品的時候,需要編寫新的具體產品類,而且還要提供與之對應的具體工廠類,系統中類的個數將成對增加,在一定程度上增加了系統的複雜度,有更多的類需要編譯和運行,會給系統帶來一些額外的開銷。
角色:
Factory(抽象工廠類):此角色是工廠方法的核心,任何工廠類都需要繼承此角色,通常是抽象的,當然也可以不是抽象的。
ConcreteFactory(具體工廠類):此角色受到使用使用者的調用會創建具體產品對象。
Product(抽象產品類):此角色爲具體產品的實現接口,通常是抽象的,當然也可以不是抽象的。
ConcreteProduct(具體產品類):此角色實現抽象產品的接口,具體工廠中創建的對象都是某個具體產品的實例。
舉例使用:
抽象產品類:
public abstract class Product {
public static String TAG = Product.class.getSimpleName();
public abstract void make();
}
具體產品類1:
public class Product1 extends Product {
@Override
public void make() {
Log.e(TAG,"工廠方法學習1!");
}
}
具體產品類2:
public class Product2 extends Product {
@Override
public void make() {
Log.e(TAG, "工廠方法學習2!");
}
}
抽象工廠類:
public abstract class Factory {
//創建抽象工廠類
public abstract Product create();
}
具體工廠類1:
public class Factory1 extends Factory {
@Override
public Product create() {
return new Product1();
}
}
具體工廠類1:
public class Factory2 extends Factory {
@Override
public Product create() {
return new Product2();
}
}
使用方法:
Factory1 factory1 = new Factory1();
Product product = factory1.create();
product.make();