創建產品,抽象工廠僅聲明一個創建產品的接口,真正創建產品是由具體產品類創建的,最通常的一個辦法是為每一個產品定義一個工廠方法,一個具體的工廠將為每個產品重定義該工廠方法以指定產品,雖然這樣的實現很簡單,但它確要求每個產品系列都要有一個新的具體工廠子類,即使這些產品系列的差別很小。
優點
分離了具體的類。抽象工廠模式幫助你控制一個應用創建的對象的類,因為一個工廠封裝創建產品對象的責任和過程。它將客戶和類的實現分離,客戶通過他們的抽象接口操縱實例,產品的類名也在具體工廠的實現中被分離,它們不出現在客戶代碼中。
它使得易于交換產品系列。一個具體工廠類在一個應用中僅出現一次——即在它初始化的時候。這使得改變一個應用的具體工廠變得很容易。它只需改變具體的工廠即可使用不同的產品配置,這是因為一個抽象工廠創建了一個完整的產品系列,所以整個產品系列會立刻改變。
它有利于產品的一致性。當一個系列的產品對象被設計成一起工作時,一個應用一次只能使用同一個系列中的對象,這一點很重要,而抽象工廠很容易實現這一點。
缺點
難以支持新種類的產品。難以擴展抽象工廠以生產新種類的產品。這是因為抽象工廠幾口確定了可以被創建的產品集合,支持新種類的產品就需要擴展該工廠接口,這將涉及抽象工廠類及其所有子類的改變。
適用性
在以下情況下應當考慮使用抽象工廠模式:
一個系統不應當依賴于產品類實例如何被創建、組合和表達的細節,這對于所有形態的工廠模式都是重要的。
這個系統有多于一個的產品族,而系統只消費其中某一產品族。
同屬于同一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。
系統提供一個產品類的庫,所有的產品以同樣的接口出現,從而使客戶端不依賴于實現。
應用場景
支持多種觀感標準的用戶界面工具箱(Kit)。
……
總結
總之,抽象工廠模式提供了一個創建一系列相關或相互依賴對象的接口,運用抽象工廠模式的關鍵點在于應對“多系列對象創建”的需求變化。一句話,學會了抽象工廠模式,你將理解OOP的精華:面向接口編程。
文章來源于領測軟件測試網 http://www.kjueaiud.com/