工厂方法模式详细介绍

简介: 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种将对象的创建逻辑封装在工厂类中的方式,使得客户端代码无需直接依赖具体的类来创建对象。

工厂方法模式的主要目的是将对象的创建和使用分离,通过引入工厂类来创建对象,从而降低了客户端代码与具体类之间的耦合度,提高了代码的可维护性和可扩展性。

工厂方法模式的核心思想是定义一个抽象的工厂接口,该接口声明了一个用于创建对象的方法,具体的对象创建逻辑由实现该接口的具体工厂类来实现。客户端代码通过调用工厂类的方法来获取对象,而无需关心具体的对象创建过程。

下面以一个简单的示例来详细介绍工厂方法模式的使用:

假设有一个披萨店,它可以制作不同种类的披萨,如芝士披萨、蔬菜披萨等。我们可以使用工厂方法模式来实现披萨的创建过程。

首先,定义一个抽象的披萨类 Pizza,它包含披萨的一些基本属性和方法。

public abstract class Pizza {
    protected String name;
    protected String dough;
    protected String sauce;
    public void prepare() {
        System.out.println("Preparing " + name);
        System.out.println("Tossing dough...");
        System.out.println("Adding sauce...");
    }
    public void bake() {
        System.out.println("Baking " + name);
    }
    public void cut() {
        System.out.println("Cutting " + name);
    }
    public void box() {
        System.out.println("Boxing " + name);
    }
    public String getName() {
        return name;
    }
}

然后,定义具体的披萨类,如芝士披萨和蔬菜披萨。

public class CheesePizza extends Pizza {
    public CheesePizza() {
        name = "Cheese Pizza";
        dough = "Regular Crust";
        sauce = "Marinara Pizza Sauce";
    }
}
public class VeggiePizza extends Pizza {
    public VeggiePizza() {
        name = "Veggie Pizza";
        dough = "Thin Crust";
        sauce = "Tomato Sauce";
    }
}

接下来,定义一个抽象的披萨工厂类 PizzaFactory,它包含一个用于创建披萨对象的方法 createPizza()

public abstract class PizzaFactory {
    public abstract Pizza createPizza(String type);
    public Pizza orderPizza(String type) {
        Pizza pizza = createPizza(type);
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;
    }
}

最后,定义具体的披萨工厂类,如芝士披萨工厂和蔬菜披萨工厂。

public class CheesePizzaFactory extends PizzaFactory {
    public Pizza createPizza(String type) {
        if (type.equals("cheese")) {
            return new CheesePizza();
        } else {
            return null;
        }
    }
}
public class VeggiePizzaFactory extends PizzaFactory {
    public Pizza createPizza(String type) {
        if (type.equals("veggie")) {
            return new VeggiePizza();
        } else {
            return null;
        }
    }
}

使用工厂方法模式的客户端代码如下:

public class PizzaStore {
    public static void main(String[] args) {
        PizzaFactory cheesePizzaFactory = new CheesePizzaFactory();
        Pizza cheesePizza = cheesePizzaFactory.orderPizza("cheese");
        System.out.println("Ordered a " + cheesePizza.getName());
        PizzaFactory veggiePizzaFactory = new VeggiePizzaFactory();
        Pizza veggiePizza = veggiePizzaFactory.orderPizza("veggie");
        System.out.println("Ordered a " + veggiePizza.getName());
    }
}

运行上述代码,输出结果如下:

Preparing Cheese Pizza
Tossing dough...
Adding sauce...
Baking Cheese Pizza
Cutting Cheese Pizza
Boxing Cheese Pizza
Ordered a Cheese Pizza
Preparing Veggie Pizza
Tossing dough...
Adding sauce...
Baking Veggie Pizza
Cutting Veggie Pizza
Boxing Veggie Pizza
Ordered a Veggie Pizza

从上述示例可以看出,工厂方法模式通过引入工厂类来创建对象,客户端代码只需调用工厂类的方法即可获取对象,无需关心具体的对象创建过程。这样可以降低客户端代码与具体类之间的耦合度,提高了代码的可维护性和可扩展性。

总结来说,工厂方法模式是一种创建型设计模式,它通过引入工厂类来创建对象,将对象的创建和使用分离,降低了客户端代码与具体类之间的耦合度。工厂方法模式适用于对象的创建过程比较复杂,或者需要根据不同的条件创建不同的对象的情况。

目录
相关文章
|
敏捷开发 安全 测试技术
阿里云云效产品使用合集之云效安全白皮书在什么地方可以查看
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
监控 搜索推荐 Java
高校学生管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL(一)
高校学生管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
698 0
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch应用实战一:实现卷积操作
PyTorch应用实战一:实现卷积操作
358 0
|
并行计算 Linux
linux deepin 23 下cuda11.2和paddlepaddle2.3.2-gpu安装
linux deepin 23 下cuda11.2和paddlepaddle2.3.2-gpu安装
557 0
|
运维 前端开发 架构师
一文搞定如何画出更加优秀的架构图
一文搞定如何画出更加优秀的架构图
1339 0
一文搞定如何画出更加优秀的架构图
|
7月前
|
算法 数据可视化 BI
基于免疫算法的最优物流仓储点选址方案MATLAB仿真
本程序基于免疫算法实现物流仓储点选址优化,并通过MATLAB 2022A仿真展示结果。核心代码包括收敛曲线绘制、最优派送路线规划及可视化。算法模拟生物免疫系统,通过多样性生成、亲和力评价、选择、克隆、变异和抑制机制,高效搜索最优解。解决了物流仓储点选址这一复杂多目标优化问题,显著提升物流效率与服务质量。附完整无水印运行结果图示。
203 20
基于免疫算法的最优物流仓储点选址方案MATLAB仿真
|
存储 人工智能 运维
重磅!阿里云可观测产品家族全新升级,AI +数据双驱动,打造全栈可观测体系
近日,阿里云可观测产品家族正式发布云监控 2.0,隶属产品日志服务 SLS、云监控 CMS、应用实时监控服务 ARMS 迎来重磅升级。
1109 112
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
Java C语言 Python
Python安装Jnius库报错DLL load failed:找不到模块
Python安装Jnius库报错DLL load failed:找不到模块
510 0
Python安装Jnius库报错DLL load failed:找不到模块
|
数据采集 搜索推荐
推荐系统实践之新闻推荐baseline理解
推荐系统实践之新闻推荐baseline理解
322 1