简单工厂模式模拟“披萨店”

以披萨店为例,我们可以应用简单工厂模式来创建不同种类的披萨。在这个例子中,我们定义一个Pizza接口和几种实现这个接口的披萨类(如CheesePizzaPepperoniPizzaVeggiePizza),然后通过一个简单工厂类来创建这些具体的披萨实例。

步骤 1: 定义披萨接口和具体的披萨类

首先,定义一个披萨接口和几个具体的披萨类:

java 复制代码
// 披萨接口
public interface Pizza {
    void prepare();
    void bake();
    void cut();
    void box();
}

// 奶酪披萨
class CheesePizza implements Pizza {
    public void prepare() {
        System.out.println("准备奶酪披萨");
    }
    public void bake() {
        System.out.println("烘焙奶酪披萨");
    }
    public void cut() {
        System.out.println("切割奶酪披萨");
    }
    public void box() {
        System.out.println("装盒奶酪披萨");
    }
}

// 意大利辣味香肠披萨
class PepperoniPizza implements Pizza {
    public void prepare() {
        System.out.println("准备意大利辣味香肠披萨");
    }
    public void bake() {
        System.out.println("烘焙意大利辣味香肠披萨");
    }
    public void cut() {
        System.out.println("切割意大利辣味香肠披萨");
    }
    public void box() {
        System.out.println("装盒意大利辣味香肠披萨");
    }
}

// 素食披萨
class VeggiePizza implements Pizza {
    public void prepare() {
        System.out.println("准备素食披萨");
    }
    public void bake() {
        System.out.println("烘焙素食披萨");
    }
    public void cut() {
        System.out.println("切割素食披萨");
    }
    public void box() {
        System.out.println("装盒素食披萨");
    }
}

步骤 2: 创建简单工厂类

然后,定义一个简单工厂类来根据传入的参数决定创建哪种披萨:

java 复制代码
public class SimplePizzaFactory {
    // 根据类型创建披萨的方法
    public Pizza createPizza(String type) {
        Pizza pizza = null;
        switch (type) {
            case "cheese":
                pizza = new CheesePizza();
                break;
            case "pepperoni":
                pizza = new PepperoniPizza();
                break;
            case "veggie":
                pizza = new VeggiePizza();
                break;
        }
        return pizza;
    }
}

步骤 3: 客户端使用简单工厂类

最后,客户端代码可以使用这个工厂来获取不同类型的披萨实例:

java 复制代码
public class PizzaStore {
    private SimplePizzaFactory factory;

    public PizzaStore(SimplePizzaFactory factory) {
        this.factory = factory;
    }

    public Pizza orderPizza(String type) {
        Pizza pizza = factory.createPizza(type);
        if (pizza != null) {
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        }
        return pizza;
    }

    public static void main(String[] args) {
        SimplePizzaFactory factory = new SimplePizzaFactory();
        PizzaStore store = new PizzaStore(factory);

        Pizza cheesePizza = store.orderPizza("cheese");
        System.out.println("订购了一份奶酪披萨\n");

        Pizza veggiePizza = store.orderPizza("veggie");
        System.out.println("订购了一份素食披萨\n");
    }
}

在这个例子中,SimplePizzaFactory充当了简单工厂的角色,负责创建不同类型的

披萨对象。PizzaStore是客户端,它通过工厂来获取披萨实例。这样,披萨的创建过程和客户端的代码被解耦,增加或修改披萨类型时,只需要修改工厂类即可,客户端代码不需要改变。以披萨店为例,我们可以应用简单工厂模式来创建不同种类的披萨。在这个例子中,我们定义一个Pizza接口和几种实现这个接口的披萨类(如CheesePizzaPepperoniPizzaVeggiePizza),然后通过一个简单工厂类来创建这些具体的披萨实例。

步骤 1: 定义披萨接口和具体的披萨类

首先,定义一个披萨接口和几个具体的披萨类:

java 复制代码
// 披萨接口
public interface Pizza {
    void prepare();
    void bake();
    void cut();
    void box();
}

// 奶酪披萨
class CheesePizza implements Pizza {
    public void prepare() {
        System.out.println("准备奶酪披萨");
    }
    public void bake() {
        System.out.println("烘焙奶酪披萨");
    }
    public void cut() {
        System.out.println("切割奶酪披萨");
    }
    public void box() {
        System.out.println("装盒奶酪披萨");
    }
}

// 意大利辣味香肠披萨
class PepperoniPizza implements Pizza {
    public void prepare() {
        System.out.println("准备意大利辣味香肠披萨");
    }
    public void bake() {
        System.out.println("烘焙意大利辣味香肠披萨");
    }
    public void cut() {
        System.out.println("切割意大利辣味香肠披萨");
    }
    public void box() {
        System.out.println("装盒意大利辣味香肠披萨");
    }
}

// 素食披萨
class VeggiePizza implements Pizza {
    public void prepare() {
        System.out.println("准备素食披萨");
    }
    public void bake() {
        System.out.println("烘焙素食披萨");
    }
    public void cut() {
        System.out.println("切割素食披萨");
    }
    public void box() {
        System.out.println("装盒素食披萨");
    }
}

步骤 2: 创建简单工厂类

然后,定义一个简单工厂类来根据传入的参数决定创建哪种披萨:

java 复制代码
public class SimplePizzaFactory {
    // 根据类型创建披萨的方法
    public Pizza createPizza(String type) {
        Pizza pizza = null;
        switch (type) {
            case "cheese":
                pizza = new CheesePizza();
                break;
            case "pepperoni":
                pizza = new PepperoniPizza();
                break;
            case "veggie":
                pizza = new VeggiePizza();
                break;
        }
        return pizza;
    }
}

步骤 3: 客户端使用简单工厂类

最后,客户端代码可以使用这个工厂来获取不同类型的披萨实例:

java 复制代码
public class PizzaStore {
    private SimplePizzaFactory factory;

    public PizzaStore(SimplePizzaFactory factory) {
        this.factory = factory;
    }

    public Pizza orderPizza(String type) {
        Pizza pizza = factory.createPizza(type);
        if (pizza != null) {
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        }
        return pizza;
    }

    public static void main(String[] args) {
        SimplePizzaFactory factory = new SimplePizzaFactory();
        PizzaStore store = new PizzaStore(factory);

        Pizza cheesePizza = store.orderPizza("cheese");
        System.out.println("订购了一份奶酪披萨\n");

        Pizza veggiePizza = store.orderPizza("veggie");
        System.out.println("订购了一份素食披萨\n");
    }
}

在这个例子中,SimplePizzaFactory充当了简单工厂的角色,负责创建不同类型的

披萨对象。PizzaStore是客户端,它通过工厂来获取披萨实例。这样,披萨的创建过程和客户端的代码被解耦,增加或修改披萨类型时,只需要修改工厂类即可,客户端代码不需要改变。

相关推荐
wy3136228212 分钟前
Android——组件化实战:Application启动时用ARouter实现跨模块调用
java·前端·spring
AI科技星5 分钟前
基于空间光速螺旋第一性原理的电荷本源定义与电场时空协变方程的完整推导、严格证明及全尺度数值验证
c语言·开发语言·算法·机器学习·数据挖掘
旺仔小拳头..6 分钟前
请求对象HttpServletRequest与响应对象HttpServletResponse
java
野犬寒鸦6 分钟前
从零起步学习AI大模型应用开发 || 第三章:智能体项目实战中的问题与解决方案及思路详解
java·服务器·数据库·人工智能·后端·面试
久绊A7 分钟前
服务器磁盘只读/故障排
java·linux·服务器
没有bug.的程序员8 分钟前
Spring Boot 与 MyBatis-Plus 批量插入的生死狙击
java·spring boot·后端·mybatis·plus·批量插入
马猴烧酒.8 分钟前
【Java复习|Lambda表达式】Java Lambda 表达式、函数式接口与匿名内部类:从起源到原理
java·开发语言·ide·笔记·python·spring
fengfuyao98512 分钟前
C# 高仿QQ截图工具(支持自定义快捷键)
开发语言·c#
2401_8579182914 分钟前
C++与自动驾驶系统
开发语言·c++·算法
wenlonglanying16 分钟前
springboot与springcloud对应版本
java·spring boot·spring cloud