Factory Method
Simple Factory
Example
Pizza
public abstract class Pizza {
public abstract void prepare();
public abstract void bake();
public abstract void cut();
public abstract void box();
}
GreekPizza
public class GreekPizza extends Pizza {
public void prepare() {
System.out.println("prepare GreekPizza~");
}
public void bake() {
System.out.println("bake GreekPizza~");
}
public void cut() {
System.out.println("cut GreekPizza~");
}
public void box() {
System.out.println("box GreekPizza~");
}
}
CheesePizza
public class CheesePizza extends Pizza {
public void prepare() {
System.out.println("prepare CheesePizza~");
}
public void bake() {
System.out.println("bake CheesePizza~");
}
public void cut() {
System.out.println("cut CheesePizza~");
}
public void box() {
System.out.println("box CheesePizza~");
}
}
Simple factory
public class SimplePizzaFactory {
public static Pizza CreatePizza(String orderType){
Pizza pizza = null;
if (orderType.equals("cheese")) {
pizza = new CheesePizza();
} else if (orderType.equals("greek")) {
pizza = new GreekPizza();
}
return pizza;
}
}
Usage
Pizza pizza;
pizza = SimplePizzaFactory.CreatePizza("cheese");
pizza = SimplePizzaFactory.CreatePizza("greek");
from: 設計模式乾貨系列:(一)簡單工廠模式
Factory Method
使用時機
你有一群繼承自相同介面的產品物件,
- 你想要將產生哪一個具體產品物件的責任交由子類別來決定,可能是因為在編譯期間你並不知道要產生哪一個具體類別,又或者是你想要提供子類別產生具體產品類別的彈性。
- 你允許客戶端傳入參數來選擇所要產生的具體類別。
- 物件產生之後尚須經過經過適當的設定步驟才可以傳回給客戶端使用,如果可以將產生物件的過程從客戶端抽離出來,則可以避免客戶端產生重複的程式碼。
from: 重新整理Factory Method Pattern
from: Factory Method Pattern Tutorial with Java Examples
Example
Factory interface
public interface PizzaFactory {
public Pizza createPizza();
}
Implement factories
public class GreekPizzaFactory implements PizzaFactory {
@Override
public Pizza createPizza() {
return new GreekPizza();
}
}
public class CheesePizzaFactory implements PizzaFactory {
@Override
public Pizza createPizza() {
return new CheesePizza();
}
}
Usage
public class OrderPizza {
public static void main(String[] args) {
PizzaFactory factory = new CheesePizzaFactory();
Pizza pizza = factory.createPizza();
}
}
from: 設計模式乾貨系列:(二)工廠方法模式