設計模式——工廠方法模式和抽象工廠模式

爲何使用工廠方法?java

Duck duck=new MallardDuck();
//使用接口讓代碼更具備彈性
//可是仍是創建了具體類的實例

在有一羣相關類時,當場會寫出這樣的代碼算法

Duck duck;

if(picnic){
    duck=new MallarDuck();
}
if(hunting){
    duck=new DecoyDuck();
}
else if(inBathTub){
    duck=new RubberDuck();
}

在不少狀況下,咱們究竟要實例化哪一個具體類,要在運行時有一些條件來決定。當看到這樣的代碼,一旦有變化或者擴展,就必須從新打開這段代碼進行檢查修改。一般這樣修改過的代碼將早場部分系統更難維護和更新,並且也更容易犯錯。spa

直接使用new不符合「對修改關閉」的原則,咱們應該依據「找出會變化的原則,把它們從不變的部分分離出來」的原則寫代碼。設計

解決方案:code

什麼是工廠方法?對象

工廠方法模式:定義了一個建立對象的接口,但由子類決定要實例化的類是哪個。工廠方法讓類把實例化推遲到子類。接口

抽象工廠模式:提供一個接口,用於建立相關或依賴對象的家族,而不須要明確指定特定類。產品

 

原則:依賴抽象,不要依賴具體類。class

目的:爲了獲得更鬆的耦合,更有彈性的設計。擴展

 

簡單的理解:

實例 -> 類 -> 類工廠

實例 -> 類 -> 類工廠 -> 抽象工廠

 

工廠方法是個方法,是在提供的抽象接口中,用來建立「一個產品」的方法。

createPizza();

而後具體子類,經過實現此接口來實現這個createPizze()的具體方法。

抽象工廠是個接口,在接口中,建立「不少產品」(或者說一個產品家族,由於產品之間有必定的聯繫)。

createDough();
createSauce();
createCheese();
//多個產品,可是相互之間有聯繫,都是一種披薩的配料

而後具體子類,經過實現此接口來實現建立這個產品家族,而其中每個create方法,均可以使用工廠方法來實現。

能夠說抽象工廠的實現中,運用到了工廠方法。

換句話說:抽象工廠的任務是定義一個負責建立一組產品的接口,這個接口內的每個方法都負責建立一個具體產品,同時咱們利用實現抽象工廠的子類來提供這些具體的算法。因此,在抽象工廠中利用工廠方法實現生產方法是至關天然的作法。

相關文章
相關標籤/搜索