工廠方法模式(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://m.papian.cn/product/51.html
更新時間:2026-03-01 08:58:53