定義
在基類中定義建立物件的乙個介面,讓子類決定例項化哪個類。工廠方法讓乙個類的的例項化延遲到子類中進行。
為什麼要用工廠模式?適用場景
需要建立的物件較少。
客戶端不關心物件的建立過程。
簡單工廠例項
public
abstract
class
animal
class
catextends
animal
}public
class
dogextends
animal
}
方法1:
public
class
animalfactory
public
static dog creatdog()
public
static cat creatcat()
}
方法2:
public
class
animalfactory
public
static animal getanimaltype
(string animal)
if(animal.
equalsignorecase
("cat"))
else
if(animal.
equalsignorecase
("dog"))
else
}}
以上兩種方式,如果我們新增產品類的話,需要修改工廠類中getanimaltype()方法,不符合「開放-封閉」原則
方法3:使用反射機制改善簡單工廠
public
class
animalfactory
public
static object getanimaltype
(class<
?extends
animal
> clazz)
catch
(instantiationexception e)
catch
(illegalacces***ception e)
catch
(classnotfoundexception e)
return obj;
}}
測試
public
class
test01
}
定義:每個物件都有乙個與之對應的工廠
適用場景
乙個類不知道它所需要的物件的類
在工廠方法模式中,客戶端不需要知道具體產品類的類名,只需要知道所對應的工廠即可,具體的產品物件由具體工廠類建立;客戶端需要指導具體產品的工廠類
乙個類通過其子類來指定建立哪個類
在工廠方法模式中,對於抽象工廠類只需要提供乙個建立產品的介面歐,而由其子類來確定具體要創鍵的物件,利用物件導向的多型性
將建立物件的任務委託給多個工廠子類中的某乙個,客戶端在使用時可以無需關心是哪乙個工廠子類建立產品子類,需要時再動態指定,可將具體工廠類的類名儲存在配置檔案或資料庫中。
角色分配
抽象工廠角色
是工廠方法的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。
具體工廠角色
這是實現抽象工廠介面的具體工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式呼叫以建立某一種產品物件。
抽象產品角色
工廠方法模式所建立的物件的超型別,也就是產品物件的共同父類或共同擁有的介面。
具體產品角色
這個角色實現了抽象產品角色所定義的介面。某具體
產品有專門的具體工廠建立,它們之間往往一一對應。
工廠方法模式例項
public
inte***ce
factory
class
factorymethoddog
implements
factory
}public
class
factorymethodcat
implements
factory
}class
test
}
定義:
工廠類不單單可以建立一種產品,二是可以建立一組產品。
適用場景
客戶端不需要知道它所建立的的物件的類
需要一組物件共同完成某種功能時,並且可能存在多組物件完成不同功能的情況。(同屬於同乙個產品族的產品)
系統結構穩定,不會頻繁的增加物件(因為一旦增加就需要修改原有**,不符合開閉原則)
角色分配
抽象工廠和工廠方法中的工廠有什麼區別?
抽象工廠:生產一整套有產品的(至少要生產兩個產品),這些產品必須互相是有關係或有依賴。
工廠方法:工廠是生產單一產品的工廠。
抽象工廠模式例項
需求:生產akm的廠家需要生產槍和對應的子彈,生產m416的廠家需要生產槍和對應的子彈。
public
inte***ce
gunclass
m416gun
implements
gun}
class
akmgun
implements
gun}
public
inte***ce
bullet
class
m416bullet
implements
bullet
}class
akmbullet
implements
bullet
}
public
inte***ce
factory
class
m416
implements
factory
@override
public bullet getbullet()
}class
akmimplements
factory
@override
public bullet getbullet()
}
public
class
test
}
設計模式筆記之工廠模式
概念 工廠模式屬於建立型模式。定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。示例 定義乙個介面 public inte ce shape 介面的第乙個實現類 public class rectangle implements shape 介面的第二個...
設計模式 設計模式之工廠模式
工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...
設計模式學習筆記之工廠模式
本文講述乙個披薩的誕生 我有一家披薩店,顧客來點了想吃的品種,然後我要準備材料 烘烤 剪下 幫顧客打包。這個過程用 怎麼實現呢?首先定義好準備 烘烤 剪下和打包這些動作 public abstract class pizza public void cut public void box publi...