在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》。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/48134.html