基本定義
工廠方法模式定義了一個創(chuàng)建對象的接口穴亏,但由子類決定要實例化的類是哪一個峡碉。工廠方法模式讓實例化推遲到子類尿招。
模式結(jié)構(gòu)
Product :抽象產(chǎn)品券腔。所有的產(chǎn)品必須實現(xiàn)這個共同的接口畔规,這樣一來局扶,使用這些產(chǎn)品的類既可以引用這個接口。
ConcreteProduct:具體產(chǎn)品叁扫。
Creator:抽象工廠三妈。它實現(xiàn)了所有操縱產(chǎn)品的方法,但不實現(xiàn)工廠方法莫绣。Creator所有的子類都必須要實現(xiàn)factoryMethod()方法畴蒲。
ConcreteCreator:具體工廠。制造產(chǎn)品的實際工廠对室。它負(fù)責(zé)創(chuàng)建一個或者多個具體產(chǎn)品模燥。
模式實現(xiàn):
Product 抽象產(chǎn)品類
ConcreteProduct 具體產(chǎn)品類
Factory 抽象工廠類
ConcreteFactory 具體工廠類
測試類
執(zhí)行結(jié)果
09:46:41.447[main]INFOcom.yanyuan.gof.build.factory.v2.HuaweiPhone - 華為手機撥打貂蟬電話
09:46:41.463[main]INFOcom.yanyuan.gof.build.factory.v2.IPhone - iPhone手機撥打小喬電話
優(yōu)缺點
優(yōu)點
在工廠方法中咖祭,用戶只需要知道所要的產(chǎn)品的具體工廠,無須關(guān)系具體的創(chuàng)建過程蔫骂,甚至不需要具體產(chǎn)品類的名稱么翰。
在系統(tǒng)增加新產(chǎn)品時,我們只需要增加一個具體的產(chǎn)品類和實現(xiàn)工廠纠吴,無需對原工廠進行任何修改硬鞍,很好的符合了“開閉原則”
缺點
每次增加一個產(chǎn)品時,都需要增加一個具體類和對象實現(xiàn)工廠戴已,系統(tǒng)中類的個數(shù)會成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度锅减,同時也增加了系統(tǒng)具體類的依賴
總結(jié)
工廠方法模式完全符合“開閉原則”
工廠方法模式使用繼承糖儡,將對象委托給子類,通過子類實現(xiàn)工廠方法來創(chuàng)建對象
在工廠方法模式中怔匣,創(chuàng)建者通常包含依賴于抽象的產(chǎn)品代碼握联,而這些抽象產(chǎn)品是由子類創(chuàng)建的,創(chuàng)建者不需要知道制作哪種具體產(chǎn)品