Java设计模式之工厂模式详解

Java设计模式之工厂模式详解


一、工厂模式核心思想

核心目标解耦对象的创建与使用,通过统一的工厂接口屏蔽对象实例化细节,提升代码的可维护性和扩展性。


二、三种工厂模式对比

模式类型 核心特点 适用场景
简单工厂模式 一个工厂类创建所有产品 产品类型少且固定
工厂方法模式 每个产品对应独立工厂,遵循开闭原则 需要扩展新产品类型
抽象工厂模式 创建产品族,保证兼容性 需要多个关联产品组合的场景

三、模式详解与代码实现

1. 简单工厂模式(Simple Factory)

Mermaid类图
SimpleFactory
+createProduct(String type) : Product
«interface»
Product
+operation()
ProductA
+operation()
ProductB
+operation()
代码实现
// 产品接口
interface Product {
    void operation();
}

// 具体产品
class ProductA implements Product {
    @Override
    public void operation() {
        System.out.println("ProductA created");
    }
}

// 简单工厂
class SimpleFactory {
    public static Product createProduct(String type) {
        return switch (type) {
            case "A" -> new ProductA();
            case "B" -> new ProductB();
            default -> throw new IllegalArgumentException();
        };
    }
}

// 客户端调用
Product product = SimpleFactory.createProduct("A");
product.operation();
特点
  • ✅ 快速实现对象创建的统一管理
  • ❌ 违反开闭原则(新增产品需修改工厂)

2. 工厂方法模式(Factory Method)

Mermaid类图
创建依赖
«interface»
Factory
+createProduct() : Product
ConcreteFactoryA
+createProduct() : Product
«interface»
Product
+operation()
ProductA
+operation()
代码实现
// 抽象工厂
interface Factory {
    Product createProduct();
}

// 具体工厂
class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

// 客户端调用
Factory factory = new ConcreteFactoryA();
Product product = factory.createProduct();
product.operation();
特点
  • ✅ 符合开闭原则,扩展性更强
  • ✅ 支持多态工厂(如数据库工厂、日志工厂)

3. 抽象工厂模式(Abstract Factory)

Mermaid类图
«interface»
AbstractFactory
+createButton() : Button
+createTextField() : TextField
WinFactory
+createButton() : Button
+createTextField() : TextField
MacFactory
+createButton() : Button
+createTextField() : TextField
«interface»
Button
+render()
WinButton
+render()
MacButton
+render()
TextField
代码实现
// 抽象产品族
interface Button { void render(); }
interface TextField { void display(); }

// Windows风格产品
class WinButton implements Button {
    public void render() { System.out.println("Windows Button"); }
}

// 抽象工厂
interface AbstractFactory {
    Button createButton();
    TextField createTextField();
}

// 具体工厂
class WinFactory implements AbstractFactory {
    public Button createButton() { return new WinButton(); }
    public TextField createTextField() { return new WinTextField(); }
}

// 客户端调用
AbstractFactory factory = new WinFactory();
Button btn = factory.createButton();
btn.render();
特点
  • ✅ 保证产品族的兼容性(如统一UI风格)
  • ✅ 支持跨平台/多主题切换

四、模式选择指南

  1. 简单工厂:产品类型不超过5种且不频繁变更时使用
  2. 工厂方法:需要灵活扩展新产品时(如插件系统)
  3. 抽象工厂:需要管理多个关联产品时(如数据库连接工厂)

如果文章对你有帮助,请帮忙点点关注吧,谢谢啦!

你可能感兴趣的:(设计模式,java,设计模式)