文章目录
工厂方法模式
工厂方法模式的结构
产品(Product) :定义工厂方法所创建的对象的接口。
具体产品(ConcreteProduct) :实现产品接口的具体类。
工厂(Creator) :声明工厂方法,返回一个产品对象。
具体工厂(ConcreteCreator):实现工厂方法,返回具体产品实例。
示例
产品接口
java
// 披萨接口
public interface Pizza {
void prepare();
void bake();
void cut();
void box();
}
具体产品
java
// 意大利披萨
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");
}
}
工厂接口
java
// 披萨工厂接口
public abstract class PizzaFactory {
public abstract Pizza createPizza();
public void orderPizza() {
Pizza pizza = createPizza();
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}
}
具体工厂
java
// 意大利披萨工厂
public class ItalianPizzaFactory extends PizzaFactory {
public Pizza createPizza() {
return new ItalianPizza();
}
}
// 美国披萨工厂
public class AmericanPizzaFactory extends PizzaFactory {
public Pizza createPizza() {
return new AmericanPizza();
}
}
客户端代码
java
public class PizzaStore {
public static void main(String[] args) {
PizzaFactory italianFactory = new ItalianPizzaFactory();
PizzaFactory americanFactory = new AmericanPizzaFactory();
italianFactory.orderPizza(); // 订购意大利披萨
americanFactory.orderPizza(); // 订购美国披萨
}
}
实际的使用
产品 具体的产品,工厂 具体的工厂
比如数据库驱动。对数据库的操作基本都是一致的。但是数据库的产品是不一样的,mysql oracle ,可以考虑工厂方法。