模式動機
生產一個特殊的女朋友禮物和衣服 ,分別需要一個抽象模版和一個知名的 工廠生產,比簡單工廠更加簡潔
模式定義
工廠方法模式(Factory Method Pattern)又稱為工廠模式,這樣做的目的是將產品類的實例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該實例化哪一個具體產品類。
模式結構
- Product:抽象產品
- ConcreteProduct:具體產品
- Factory:抽象工廠
- ConcreteFactory:具體工廠
優點
使用工廠方法模式的另一個優點是在系統中加入新產品時
,無須修改抽象工廠和抽象產品提供的接口,無須修改客戶端,也無須修改其他的具體工廠和具體產品,而只要添加一個具體工廠和具體產品就可以了。這樣,系統的可擴展性也就變得非常好,完全符合“開閉原則”。
缺點
在添加新產品時,需要編寫新的具體產品類,而且還要提供與之對應的具體工廠類,系統中類的個數將成對增加,在一定程度上增加了系統的復雜度,有更多的類需要編譯和運行,會給系統帶來一些額外的開銷。
適用環境
客戶端在使用時可以無須關心是哪一個工廠子類創建產品子類,需要時再動態指定,可將具體工廠類的類名存儲在配置文件或數據庫中。
模式擴展
1、使用多個工廠方法:在抽象工廠角色中可以定義多個工廠方法,從而使具體工廠角色實現這些不同的工廠方法,這些方法可以包含不同的業務邏輯,以滿足對不同的產品對象的需求。
2、產品對象的重復使用:工廠對象將已經創建過的產品保存到一個集合(如數組、List等)中,然后根據客戶對產品的請求,對集合進行查詢。如果有滿足要求的產品對象,就直接將該產品返回客戶端;如果集合中沒有這樣的產品對象,那么就創建一個新的滿足要求的產品對象,然后將這個對象在增加到集合中。
感謝:
https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/behavioral.html
http://www.runoob.com/design-pattern/design-pattern-intro.html