之前,我們講了不算是設計模式的「簡單工廠模式」,他將可變部分和固定部分進行分離,將物件的例項化封裝到另乙個類中,一定程度上減弱了擴充套件時帶來的負面影響。接下來我們將敘述工廠方法。
首先,我們先講下工廠模式的設計原則——依賴倒置原則:要依賴抽象,不要依賴具體類。這裡說明了無論高層或低層元件都必須依賴於抽象。
依賴的意思:如果a的具體實現發生任何的改變都會影響b,那麼b就依賴於a。所謂高層元件,是由其他低層元件定義其行為的類。在前例中,高層元件就是pizzastore,低層元件就是pizza。
在前例的基礎上,我們需要對pizzastore進行擴充套件,開設加盟店。
從******pizzafactory出發,我們可以擴充套件出nystorepizzafactory,chicagopizzafactory分別用來生產紐約風味,芝加哥風味的披薩。
nypizzafactory nypizzafactory = new nypizzafactory();//建立紐約風味的披薩製作工廠
nypizzastore nystore = new pizzastore(nypizzafactory);//建立乙個披薩店,將披薩製作工廠作為引數
nystore.orderpizza("veggie");
chicagopizzafactory chicagopizzafactory = new chicagopizzafactory();
chicagopizzastore chicagostore = new pizzastore(chicagopizzafactory);
chicagostore.orderpizza("veggie");
在這種情況下,我們每增加乙個加盟店,新建乙個factory,但是前例中的固定部分(prepare(),bake(),cut(),box())卻缺少了約束(順序可能改變,可能缺少部分,也可能增加的部分)。我們希望通過建立乙個框架增加一些質量控制。
public abstract class pizzastore
//工廠方法是抽象的
abstract pizza createpizza(string type);
}
nypizzastore
public class nypizzastore extends pizzastore else if (type.equals("veggie"))else if (type.equals("clam"))else if (type.equals("pepperoni"))else }}
chicagopizzastore
public class chicagopizzastore extends pizzastore else if (type.equals("veggie"))else if (type.equals("clam"))else if (type.equals("pepperoni"))else }}
產品類public class pizza
}void bake()
void cut()
void box()
public string getname()
}
public class nystylecheesepizza extends pizza
}
public class chicagostylecheesepizza extends pizza
}
測試類:
public class pizzatestdrive
}
結果:
在工廠模式下,有兩個元件:一是建立者類(pizzastore),另乙個是產品類(pizza)。它們是平行的關係(因為它們都有抽象類,而抽象類都有許多具體的子類,每個子類都有自己的特定實現)。由此我們可以看到在普通工廠模式區別於簡單工廠模式的一方面是:普通工廠模式不但抽象了產品類,還抽象了建立者類。
nypizzastore封裝的是如何製作紐約風味的披薩,chicagopizzastore封裝的是如何製作芝加哥風味的披薩。工廠方法就是封裝這種知識的關鍵所在。
設計模式 工廠模式(學習筆記)
披薩專案 要方便專案的擴充套件,要便於維護 要能執行時擴充套件。披薩族設計 不足之處 披薩只能prepare bake cut box操作,增加新功能需要更改原始抽象類,程式擴充套件性低。簡單工廠模式的設計方案 定義乙個例項化披薩物件的類,封裝建立物件的 將例項部分與抽象超類分隔開,放在工廠裡提高擴...
java設計模式學習 2 工廠模式
工廠模式分為 簡單工廠模式 靜態工廠模式 工廠方法模式 多型性工廠模式或者虛擬工廠模式 抽象工廠模式。簡單工廠模式 工廠類根據傳入的引數決定建立出哪一種產品類的例項。簡單工廠模式涉及到3個角色 工廠角色,抽象產品角色,具體產品角色。工廠方法模式 工廠方法模式涉及到4個角色 抽象工廠角色,具體工廠角色...
JAVA設計模式學習6 抽象工廠模式
前面我們介紹了簡單工廠,工廠方法模式,這節來看看抽象工廠模式,抽象工廠模式 abstract factory 是工廠方法裡面最為抽象和最具一般性的形態,是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體的情況下,建立多個產品族中的產品物件。...