工厂方法模式(Factory Method Pattern)是面向对象设计中常用的创建型设计模式之一,它提供了一种创建对象的灵活方式,将对象的实例化过程延迟到子类中实现。本文将从概念、结构、应用场景及代码实现等角度,全面解析这一经典设计模式。
工厂方法模式属于创建型设计模式,其核心思想是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。工厂方法让类的实例化过程延迟到子类中进行,从而实现了对象的创建与使用的分离。
`java
// 抽象产品
interface Product {
void operation();
}
// 具体产品A
class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("具体产品A的操作");
}
}
// 具体产品B
class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("具体产品B的操作");
}
}
// 抽象工厂
abstract class Creator {
// 工厂方法
public abstract Product factoryMethod();
// 业务方法
public void someOperation() {
Product product = factoryMethod();
product.operation();
}
}
// 具体工厂A
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
// 具体工厂B
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}`
工厂方法模式适用于以下场景:
很多人容易混淆工厂方法模式和简单工厂模式,主要区别在于:
简单工厂模式违反了开闭原则(对扩展开放,对修改关闭),而工厂方法模式更好地遵循了这一原则。
以下是一个文档处理系统的工厂方法实现:
`java
// 文档接口
interface Document {
void open();
void save();
}
// Word文档
class WordDocument implements Document {
@Override
public void open() {
System.out.println("打开Word文档");
}
@Override
public void save() {
System.out.println("保存Word文档");
}
}
// PDF文档
class PDFDocument implements Document {
@Override
public void open() {
System.out.println("打开PDF文档");
}
@Override
public void save() {
System.out.println("保存PDF文档");
}
}
// 文档工厂接口
interface DocumentFactory {
Document createDocument();
}
// Word文档工厂
class WordDocumentFactory implements DocumentFactory {
@Override
public Document createDocument() {
return new WordDocument();
}
}
// PDF文档工厂
class PDFDocumentFactory implements DocumentFactory {
@Override
public Document createDocument() {
return new PDFDocument();
}
}
// 客户端使用
public class Client {
public static void main(String[] args) {
DocumentFactory factory = new WordDocumentFactory();
Document doc = factory.createDocument();
doc.open();
doc.save();
}
}`
工厂方法模式是设计模式中非常重要的一种,它体现了"依赖倒置原则"和"开闭原则"的核心思想。通过将对象的创建延迟到子类,实现了创建逻辑与使用逻辑的分离,提高了系统的灵活性和可扩展性。
在实际开发中,当遇到需要创建多种类型对象、且这些对象有共同的接口或抽象类时,考虑使用工厂方法模式可以让代码更加清晰、易于维护和扩展。
需要注意的是,设计模式不是银弹,过度使用可能会导致系统过度设计。应根据实际需求和项目规模,合理选择是否使用以及如何使用工厂方法模式。
如若转载,请注明出处:http://www.lifengchuanmei.com/product/51.html
更新时间:2026-01-13 20:31:04