?Alias: virtual constructor 虛構(gòu)造器
?Intent
Define an interface for creating an object, but letsubclasses decide which class to instantiate. FactoryMethod lets a class defer instantiation to subclasses.
(定義一個用于創(chuàng)建對象的接口州邢,讓子類決定實例化哪一個類鉴腻。 Factory Method使一個類的實例化延遲到其子類这嚣。 )
?Motivation
Frameworks use abstract classes to define and maintainrelationships between objects. A framework is oftenresponsible for creating these objects as well.
1)優(yōu)點
? 多態(tài)性:客戶代碼可以做到與特定應(yīng)用無關(guān), 適用于任何實體類
? Connects parallel class hierarchies提供缺省實現(xiàn)瑟蜈,子類可以重寫新的實現(xiàn),也可以繼承父類的實現(xiàn)渣窜。 -- 加一層間接性铺根,增加了靈活性
? Connects parallel class hierarchies
?良好的封裝性,代碼結(jié)構(gòu)清晰乔宿。
?擴展性好位迂,在增加產(chǎn)品類的情況下,只需要適當(dāng)修改具體的工廠類或擴展一個工廠類详瑞,就可“ 擁抱變化”
?屏蔽產(chǎn)品類掂林。產(chǎn)品類的實現(xiàn)如何變化砚嘴,調(diào)用者都不需要關(guān)心部逮,只需關(guān)心產(chǎn)品的接口,只要接口保持不變都弹,系統(tǒng)中的上層模塊就不會發(fā)生變化计寇。
?典型的解耦框架锣杂。高層模塊只需要知道產(chǎn)品的抽象類脂倦,其他的實現(xiàn)類都不需要關(guān)心,符合迪米特法則元莫,符合依賴倒臵原則赖阻,符合里氏替換原則。
2)缺點
需要Creator和相應(yīng)的子類作為factory method的載體踱蠢,如果應(yīng)用模型確實需要creator和子類存在火欧,則很好;否則的話茎截, 需要增加一個類層次