抽象工廠
維基百科,自由的 encyclopedia
抽象工廠模式(英語:Abstract factory pattern)是一種軟體開發設計模式。抽象工廠模式提供了一種方式,可以將一組具有同一主題的單獨的工廠封裝起來。在正常使用中,客戶端程式需要建立抽象工廠的具體實現,然後使用抽象工廠作為介面來建立這一主題的具體對象。客戶端程式不需要知道(或關心)它從這些內部的工廠方法中獲得對象的具體類型,因為客戶端程式僅使用這些對象的通用介面。抽象工廠模式將一組對象的實現細節與他們的一般使用分離開來。
舉個例子來說,比如一個抽象工廠類叫做DocumentCreator
(文件建立器),此類提供建立若干種產品的介面,包括createLetter()
(建立信件)和createResume()
(建立簡歷)。其中,createLetter()
返回一個Letter
(信件),createResume()
返回一個Resume
(簡歷)。系統中還有一些DocumentCreator
的具體實現類,包括FancyDocumentCreator
和ModernDocumentCreator
。這兩個類對DocumentCreator
的兩個方法分別有不同的實現,用來建立不同的「信件」和「簡歷」(用FancyDocumentCreator
的實例可以建立FancyLetter
和FancyResume
,用ModernDocumentCreator
的實例可以建立ModernLetter
和ModernResume
)。這些具體的「信件」和「簡歷」類均繼承自抽象類,即Letter
和Resume
類。客戶端需要建立「信件」或「簡歷」時,先要得到一個合適的DocumentCreator
實例,然後呼叫它的方法。一個工廠中建立的每個對象都是同一個主題的(「fancy」或者「modern」)。客戶端程式只需要知道得到的對象是「信件」或者「簡歷」,而不需要知道具體的主題,因此客戶端程式從抽象工廠DocumentCreator
中得到了Letter
或Resume
類的參照,而不是具體類的對象參照。
「工廠」是建立產品(對象)的地方,其目的是將產品的建立與產品的使用分離。抽象工廠模式的目的,是將若干抽象產品的介面與不同主題產品的具體實現分離開。這樣就能在增加新的具體工廠的時候,不用修改參照抽象工廠的客戶端代碼。
使用抽象工廠模式,能夠在具體工廠變化的時候,不用修改使用工廠的客戶端代碼,甚至是在執行時。然而,使用這種模式或者相似的設計模式,可能給編寫代碼帶來不必要的複雜性和額外的工作。正確使用設計模式能夠抵消這樣的「額外工作」。