工廠就是用來創造東西。編程
提供了一個建立對象實例的功能,而不關心具體的實現細節。spa
不須要建立工廠實例,方法爲靜態設計
定義一個建立對象的接口,讓子類決定實例化哪個類,工廠方法使一個對象的實例化延遲到子類。對象
在父類不知道具體實現的狀況下,完成自身的功能調用,具體的實現由子類完成。設計的時候不須要考慮具體的實現,須要哪一個對象在,經過工廠方法返回就能夠。blog
實現:接口
工廠方法的實現,通常是定義一個抽象類,包含建立對象所需的抽象方法則爲工廠方法。也能夠實現爲具體的類,這樣就會有一個默認的方法,子類去覆蓋這個方法,爲子類提供掛鉤。產品
在工廠方法模式裏,要麼使用Creator對象,要麼使用Creator建立出來的對象, 一版客戶端不會直接使用工廠方法。擴展
提供一個建立一系列相關或相互依賴的接口,而無需指定他們具體須要實現的類配置
爲一系列相關對象或相互依賴的對象,建立一個接口。方法
工廠方法的本質是用來選擇實現的,跟簡單工廠的區別在於工廠方法的實現是延遲到子類的。若是把工廠方法的實現放到父類直接實現就至關於簡單工廠。
簡單工廠用來選擇實現,能夠選擇任意接口的實現,一個工廠能夠用於選擇和建立多個個對象,可是這多個對象之間是沒有聯繫的。
抽象工廠是用來選擇產品簇的實現,抽象工廠有多個方法來選擇並建立對象,這些對象之間一般是有關係的。若是抽象工廠只有一個實現,不分層次,則至關於簡單工廠。
這兩個模式既有區別也有聯繫,能夠組合使用。工廠方法模式是針對單獨的產品的建立,而抽象工廠針對產品簇的建立,抽象工廠能夠退化成工廠方法,工廠方法能夠退化成簡單工廠。
在抽象工廠的實現中,可使用簡單工廠來提供抽象工廠的具體實現,能夠這麼組合使用。