提供一個建立一系列相關或相互依賴對象的接口,而無需指定他們具體的類;spa
AbstractFactory:聲明一組用於建立一族產品的方法,每一個方法對應一種產品;設計
ConcreteFactory:實現抽象工廠建立產品的方法,生成一組具體產品,這些產品構成了一個產品族,每一個產品都位於某個產品等級中。對象
AbstractProduct:爲每種產品聲明接口,抽象產品中定義了該產品的全部業務方法blog
ConcreteProduct:定義某個具體工廠生產的具體產品對象,實如今抽象接口中聲明的業務方法;接口
一、隔離了具體類的生成,客戶不須要關注什麼被建立;產品
二、當一個產品族中多個對象被設計成一塊兒工做時,能保證客戶端始終只使用同一產品族中對象;配置
三、增長新的產品族很方便,無需改動已有系統,符合開閉原則。方法
一、一個系統不該當依賴於產品類實例如何被建立,組合和表達的細節。用戶無需關注對象建立過程,將對象的建立和使用解耦;im
二、系統有多於一個的產品族,每次使用其中一個產品族,可經過配置文件等方式來使得用戶能夠動態改變產品族,也能夠方便增長新的產品族;配置文件
三、屬於同一產品族的產品將放在一塊兒使用。這一約束必須在系統的設計中體現出來;
四、產品等級結構穩定,設計完成後,不會向系統中增長新的產品等級結構或者刪除已有的產品登記結構;