上一篇                     
               
			  如何编写Java工厂模式?
- 后端开发
 - 2025-07-07
 - 4176
 
 工厂模式是一种创建型设计模式,通过工厂类封装对象创建逻辑,客户端无需关心具体实现,只需调用工厂方法即可获得所需对象实例,实现解耦与扩展性提升。
 
在Java中,工厂模式是一种创建型设计模式,用于解耦对象的创建与使用,它通过统一的接口创建对象,使代码更灵活、可维护,以下是详细实现方法,涵盖简单工厂和工厂方法两种常用形式:
为什么需要工厂模式?
- 降低耦合:客户端无需知道具体类的创建细节。
 - 扩展性强:新增产品时,只需扩展工厂,无需修改客户端代码。
 - 统一管理:将对象创建逻辑集中处理,避免代码重复。
 
简单工厂模式(静态工厂)
通过一个静态方法根据输入参数创建不同对象:
// 1. 定义产品接口
interface Animal {
    void speak();
}
// 2. 实现具体产品
class Dog implements Animal {
    @Override
    public void speak() {
        System.out.println("Woof!");
    }
}
class Cat implements Animal {
    @Override
    public void speak() {
        System.out.println("Meow!");
    }
}
// 3. 创建工厂类
class AnimalFactory {
    public static Animal createAnimal(String type) {
        if ("dog".equalsIgnoreCase(type)) {
            return new Dog();
        } else if ("cat".equalsIgnoreCase(type)) {
            return new Cat();
        }
        throw new IllegalArgumentException("Unknown animal type");
    }
}
// 4. 客户端使用
public class Client {
    public static void main(String[] args) {
        Animal dog = AnimalFactory.createAnimal("dog");
        dog.speak(); // 输出: Woof!
    }
} 
工厂方法模式
为每个产品提供独立的工厂,符合开闭原则:
// 1. 产品接口(同上)
interface Animal { void speak(); }
// 2. 具体产品(同上)
class Dog implements Animal { /*...*/ }
class Cat implements Animal { /*...*/ }
// 3. 定义抽象工厂
interface AnimalFactory {
    Animal createAnimal();
}
// 4. 实现具体工厂
class DogFactory implements AnimalFactory {
    @Override
    public Animal createAnimal() {
        return new Dog();
    }
}
class CatFactory implements AnimalFactory {
    @Override
    public Animal createAnimal() {
        return new Cat();
    }
}
// 5. 客户端使用
public class Client {
    public static void main(String[] args) {
        AnimalFactory dogFactory = new DogFactory();
        Animal dog = dogFactory.createAnimal();
        dog.speak(); // 输出: Woof!
    }
} 
工厂模式最佳实践
-  
适用场景:
- 系统需要支持多种相似对象
 - 创建逻辑复杂(如依赖配置或环境)
 - 需要统一管理对象生命周期(如连接池)
 
 -  
优势:
- 符合单一职责原则(创建逻辑独立)
 - 易于单元测试(可Mock工厂)
 - 支持开闭原则(扩展无需修改已有代码)
 
 -  
注意事项:
- 避免过度设计:简单场景可直接用
new - 优先选择工厂方法模式,扩展性更强
 - 结合Spring等框架时,常用
@Bean或XML配置实现工厂 
 - 避免过度设计:简单场景可直接用
 
工厂模式 vs 抽象工厂模式
- 工厂方法:针对单一产品等级结构(如动物)。
 - 抽象工厂:用于创建产品族(例如同时创建动物和食物),结构更复杂,适合大型系统。
 
通过工厂模式,Java开发者能构建高内聚、低耦合的系统,实际项目中可结合Spring框架的FactoryBean或Lombok的@Builder进一步简化代码,掌握此模式是提升设计能力的关键一步。
引用说明:本文代码示例参考自《Head First Design Patterns》创建型模式章节,并结合Oracle官方Java文档中接口与工厂模式的实践建议,设计模式概念定义参考了GoF(Gang of Four)经典著作《Design Patterns: Elements of Reusable Object-Oriented Software》。
			
			