優(yōu)點(diǎn):
用戶只需要知道具體工廠的名稱就可得到所要的產(chǎn)品,無須知道產(chǎn)品的具體創(chuàng)建過程。
靈活性增強(qiáng),對于新產(chǎn)品的創(chuàng)建,只需多寫一個相應(yīng)的工廠類。
典型的解耦框架。高層模塊只需要知道產(chǎn)品的抽象類,無須關(guān)心其他實(shí)現(xiàn)類,滿足迪米特法則、依賴倒置原則和里氏替換原則。
缺點(diǎn):
類的個數(shù)容易過多,增加復(fù)雜度
增加了系統(tǒng)的抽象性和理解難度
抽象產(chǎn)品只能生產(chǎn)一種產(chǎn)品,此弊端可使用抽象工廠模式解決。
應(yīng)用場景:
客戶只知道創(chuàng)建產(chǎn)品的工廠名,而不知道具體的產(chǎn)品名。如 TCL 電視工廠、海信電視工廠等。
創(chuàng)建對象的任務(wù)由多個具體子工廠中的某一個完成,而抽象工廠只提供創(chuàng)建產(chǎn)品的接口。
客戶不關(guān)心創(chuàng)建產(chǎn)品的細(xì)節(jié),只關(guān)心產(chǎn)品的品牌
模式的結(jié)構(gòu)與實(shí)現(xiàn)
工廠方法模式由抽象工廠、具體工廠、抽象產(chǎn)品和具體產(chǎn)品等4個要素構(gòu)成。本節(jié)來分析其基本結(jié)構(gòu)和實(shí)現(xiàn)方法。
1. 模式的結(jié)構(gòu)
工廠方法模式的主要角色如下。
抽象工廠(Abstract Factory):提供了創(chuàng)建產(chǎn)品的接口,調(diào)用者通過她訪問具體工廠的工廠方法 newProduct() 來創(chuàng)建產(chǎn)品。
具體工廠(ConcreteFactory):主要是實(shí)現(xiàn)抽象工廠中的抽象方法,完成具體產(chǎn)品的創(chuàng)建。
抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述了產(chǎn)品的主要特性和功能。
具體產(chǎn)品(ConcreteProduct):實(shí)現(xiàn)了抽象產(chǎn)品角色所定義的接口,由具體工廠來創(chuàng)建,她同具體工廠之間一一對應(yīng)。
其結(jié)構(gòu)圖如圖 1 所示。
來源:http://c.biancheng.net/view/1351.html