【设计模式】【创建型5-2】【工厂方法模式】

文章目录

工厂方法模式

工厂方法模式的结构

产品(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 ,可以考虑工厂方法。

相关推荐
老蒋每日coding1 小时前
AI Agent 设计模式系列(十八)—— 安全模式
人工智能·安全·设计模式
老蒋每日coding4 小时前
AI Agent 设计模式系列(十六)—— 资源感知优化设计模式
人工智能·设计模式·langchain
老蒋每日coding4 小时前
AI Agent 设计模式系列(十七)—— 推理设计模式
人工智能·设计模式
冷崖4 小时前
桥模式-结构型
c++·设计模式
连山齐名4 小时前
设计模式之一——堵塞队列
设计模式
会员果汁4 小时前
19.设计模式-命令模式
设计模式·命令模式
茶本无香4 小时前
设计模式之六—组合模式:构建树形结构的艺术
java·设计模式·组合模式
橘色的喵4 小时前
嵌入式 C++ 高性能流式架构的设计
数码相机·设计模式
会员果汁5 小时前
20.设计模式-职责链模式
设计模式
她和夏天一样热19 小时前
【设计模式】工厂方法模式在开发中的真实应用
设计模式·工厂方法模式