簡單工廠模式學習筆記
首先將需要創建的各種不同對象的相關代碼封裝到不同的類中,這些類成爲具體產品類,而將它們公共的代碼進行抽象和提取後封裝在一個抽象產品類中,每一個具體產品類都是抽象產品類的子類;然後提供一個工廠類用戶創建各種產品,在工廠類中提供一個創建產品的工廠方法,該方法可以根據所傳入的參數不同創建不同的具體產品對象;客戶端只需調用工廠類的工廠方法並傳入相應的參數即可得到一個產品對象。
簡單工廠模式:定義一個工廠類,它可以根據參數的不同返回不同類的實例,被創建的實例通常具有共同的父類。因爲在簡單工廠模式中用於創建實例的方法是靜態方法,因此簡單工廠模式又被稱爲靜態工廠方法模式,屬於類創建型模式。
簡單工廠模式主要是分爲工廠類,抽象產品類和具體產品類。
抽象產品類:
abstract class Product {
public void methodSame(){
/*公共方法的實現*/
}
//聲明抽象業務方法
public abstract void methodDiff();
}
具體產品A:
class ConcreteProductA extends Product {
public void methodDiff() {
//業務方法的實現
}
}
具體產品B:
class ConcreteProductB extends Product {
public void methodDiff() {
//業務方法的實現
}
}
工廠類:
class Factory {
public static Product getProduct(String arg) {
Product product = null;
if(arg.equals("A")) {
product = new ConcreteProductA();
} else if(arg.equals("B")) {
product = new ConcreateProductB();
}
return product;
}
}
客戶端調用:
class Client {
public static void main(String args[]) {
Product product;
product = Factory.getProduct("A");
product.methodSame();
product.methodDiff();
}
}
把產品共同的行爲給抽象出來,然後具體產品類繼承抽象產品類,而該模式核心的方法是工廠類,它還有一個靜態getProduct()方法,客戶端直接調用該靜態方法,傳入需要的產品類型就可以返回Product類型的對象。
簡單工廠模式總結:
簡單工廠模式提供了專門的工廠類用於創建對象,將對象的創建和使用分離開。
優點
(1) 工廠類包含必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以直接消費產品。實現了對象創建和使用的分離。
(2) 客戶端無需知道具體產品類的類名,只需要知道具體產品類所對應的參數即可。缺點
由於所有的產品創建都是在工廠類進行的,一旦工廠類不能正常工作,整個系統都會受到影響。簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法行程基於繼承的等級結構。
適用場景: 工廠類負責創建的對象比較少,客戶只知道傳入工程類的參數,對於如何創建對象不關心。