文章目錄
- 工廠方法模式
- 工廠方法模式的結構
- 示例
- 產品接口
- 具體產品
- 工廠接口
- 具體工廠
- 客戶端代碼
- 實際的使用
工廠方法模式
工廠方法模式的結構
產品(Product):定義工廠方法所創建的對象的接口。
具體產品(ConcreteProduct):實現產品接口的具體類。
工廠(Creator):聲明工廠方法,返回一個產品對象。
具體工廠(ConcreteCreator):實現工廠方法,返回具體產品實例。
示例
產品接口
// 披薩接口
public interface Pizza {void prepare();void bake();void cut();void box();
}
具體產品
// 意大利披薩
public class ItalianPizza implements Pizza {public void prepare() {System.out.println("Preparing Italian Pizza");}public void bake() {System.out.println("Baking Italian Pizza");}public void cut() {System.out.println("Cutting Italian Pizza");}public void box() {System.out.println("Boxing Italian Pizza");}
}// 美國披薩
public class AmericanPizza implements Pizza {public void prepare() {System.out.println("Preparing American Pizza");}public void bake() {System.out.println("Baking American Pizza");}public void cut() {System.out.println("Cutting American Pizza");}public void box() {System.out.println("Boxing American Pizza");}
}
工廠接口
// 披薩工廠接口
public abstract class PizzaFactory {public abstract Pizza createPizza();public void orderPizza() {Pizza pizza = createPizza();pizza.prepare();pizza.bake();pizza.cut();pizza.box();}
}
具體工廠
// 意大利披薩工廠
public class ItalianPizzaFactory extends PizzaFactory {public Pizza createPizza() {return new ItalianPizza();}
}// 美國披薩工廠
public class AmericanPizzaFactory extends PizzaFactory {public Pizza createPizza() {return new AmericanPizza();}
}
客戶端代碼
public class PizzaStore {public static void main(String[] args) {PizzaFactory italianFactory = new ItalianPizzaFactory();PizzaFactory americanFactory = new AmericanPizzaFactory();italianFactory.orderPizza(); // 訂購意大利披薩americanFactory.orderPizza(); // 訂購美國披薩}
}
實際的使用
產品 具體的產品,工廠 具體的工廠
比如數據庫驅動。對數據庫的操作基本都是一致的。但是數據庫的產品是不一樣的,mysql oracle ,可以考慮工廠方法。