Java23种设计模式-创建型模式之工厂方法模式

工厂方法模式(Factory Method Pattern)

一种创建型设计模式,它定义了一个用于创建对象接口,让子类决定将哪一个类实例化,从而将产品的实例化推迟到子类中。这种模式的主要角色包括:

角色1:抽象工厂(Abstract Factory)。它是工厂方法模式的核心,与应用程序无关,提供了创建产品的接口

角色2:具体工厂(Concrete Factory)。它是实现抽象工厂接口的具体工厂类,负责创建具体的产品对象。

角色3:抽象产品(Product)。它是所有对象的超类,定义了产品的规范,描述了产品的共同主要特性和功能

角色4:具体产品(Concrete Product)。它是实现了抽象产品角色所定义的接口的具体对象,由专门的具体工厂来创建。

工厂方法模式优点包括:

用户需要知道具体工厂的名称,就可以得到想要的产品无需知道产品的具体创建过程

系统的灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。

高层模块只需知道产品抽象类,关心其他实现类,这满足了迪米特法则、依赖倒置原则和里里氏替换原则
工厂方法模式的缺点包括:
类的个数可能过多增加了系统的复杂度理解难度

如果抽象产品只能生产一种产品,这可能成为一个限制。

工厂方法模式适用于以下场景
客户不关心创建产品的细节只关心创建产品的工厂名
一个类通过其子类指定创建哪个产品对象

这种模式是在简单工厂模式上改进,核心工厂类不再负责所有产品的构建,而是将具体的工作交给子类进行实现,不再接触业务相关具体细节
示例:

定义了一个Shape接口和实现了Shape接口的具体类Circle。然后定义一个工厂类 ShapeFactory,它可以根据参数创建不同类型的Shape对象

java 复制代码
//定义形状接口
public interface Shape {
    void draw();
}

//圆形类(具体产品实现)
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Circle::draw()");
    }
}
//工厂方法类--根据产品给对象实例化
public class ShapeFactory {
    public static Shape getShape(String shapeType){
        if (shapeType==null){
            return null;
        }
        if (shapeType.equalsIgnoreCase("CIRCLE")){
            return new Circle();
        }
        //这里可以添加更多的形状和对应的条件判断
        return null;
    }
}
//测试类
public class FactoryPatternDemo {
    public static void main(String[] args) {
        Shape circle =ShapeFactory.getShape("CIRCLE");
        if (circle!=null){
            circle.draw();
        }
        //这里可以添加更多的形状测试
    }
}
相关推荐
.54810 分钟前
Two Pointers(双指针)
java·数据结构·算法
AI进化营-智能译站15 分钟前
ROS2 C++开发系列11-VS Code一键生成Doxygen注释|让ROS2节点文档自动跟上代码迭代
java·数据库·c++·ai
bzmK1DTbd23 分钟前
OpenGL与Java:JOGL库的3D图形渲染实战
java·3d·图形渲染
许彰午23 分钟前
CacheSQL(四):CacheSQLClient——用一张路由表实现水平扩展
java·数据库·缓存·系统架构·政务
许彰午27 分钟前
CacheSQL(三):双 HTTP 引擎与 SQL 查询——接口抽象的价值
java·数据库·sql·缓存
手握风云-1 小时前
Spring AI:让大模型住进 Spring 生态(三)
java·后端·spring
咸鱼2.02 小时前
【java入门到放弃】Dubbo
java·开发语言·dubbo
JAVA面经实录9179 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
许彰午11 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
Bat U11 小时前
JavaEE|多线程初阶(七)
java·开发语言