有一個批薩店,批薩店當然要賣批薩,所以會有各種口味類型的批薩:CheesePizza, ClamPizza, VeggiesPizza, PepperoniPizza..........
用戶要求一種口味,批薩店就要給人對應的批薩。例如:用戶要買CheesePizza,批薩店就要給人家一塊CheesePizza。。
1。簡單工廠
public abstract class PizzaStore {
simplePizzaFactory factory; //簡單工廠
public PizzaStore( simplePizzaFactory factory ) {
this.factory = factory;
}
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = factory.createPizza( type ); //通常利用靜態方法定義簡單工廠
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
2。工廠方法
批薩店開得很好,紐約和芝加哥相繼有人要加盟。但是紐約人和芝加哥人的口味偏好不同,紐約批薩的薄餅,芝加哥比薩的餅厚等。所以有了工廠方法(抽象,繼承)
工廠方法模式:定義了一個創建對象的接口,但由子類決定要實例化類是哪一個。工廠方法讓類把實例化推遲到子類。
依賴倒置原則:要依賴抽象,不要依賴具體類。
3。抽象工廠
現在有一些加盟店,使用低價原料來增加利潤。爲杜絕這種情況,要求確保原料的一致,所以利用 抽象工廠模式 建立原料工廠,這個工廠將負責創建原料家族中的每一種原料。也就是說,工廠將需要生產麪糰,醬料,芝士等。
抽象工廠模式:提供一個接口,用於創建相關或依賴對象的家族,而不需要明確制定具體類
總結:
1.所有的工廠都是用來封裝對象的創建
2.簡單工廠,雖然不是真正的設計模式,但仍不失爲一個簡單的方法,可以將客戶程序從具體類解耦
3.工廠方法使用繼承:把對象的創建委託給子類,子類實現工廠方法來創建對象。
4.抽象工廠使用對象組合:對象的創建被實現在工廠接口所暴露出來的方法中
5.所有工廠模式都通過減少應用程序和具體類之間的依賴促進耦合
main:
public class PizzaTestDrive {
public static void main(String[] args) {
PizzaStore nyStore = new NYPizzaStore();
PizzaStore chicagoStore = new ChicagoPizzaStore();
Pizza pizza = nyStore.orderPizza("cheese");
System.out.println("Ethan ordered a " + pizza.getName() + "\n");
pizza = chicagoStore.orderPizza("cheese");
System.out.println("Joel ordered a " + pizza.getName() + "\n");
}
}