工廠方法模式(Factory Method Pattern)是面向?qū)ο笤O(shè)計中常用的創(chuàng)建型設(shè)計模式之一,它提供了一種創(chuàng)建對象的靈活方式,將對象的實例化過程延遲到子類中實現(xiàn)。本文將從概念、結(jié)構(gòu)、應(yīng)用場景及代碼實現(xiàn)等角度,全面解析這一經(jīng)典設(shè)計模式。
工廠方法模式屬于創(chuàng)建型設(shè)計模式,其核心思想是定義一個創(chuàng)建對象的接口,但讓實現(xiàn)這個接口的類來決定實例化哪一個類。工廠方法讓類的實例化過程延遲到子類中進行,從而實現(xiàn)了對象的創(chuàng)建與使用的分離。
`java
// 抽象產(chǎn)品
interface Product {
void operation();
}
// 具體產(chǎn)品A
class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("具體產(chǎn)品A的操作");
}
}
// 具體產(chǎn)品B
class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("具體產(chǎn)品B的操作");
}
}
// 抽象工廠
abstract class Creator {
// 工廠方法
public abstract Product factoryMethod();
// 業(yè)務(wù)方法
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();
}
}`
工廠方法模式適用于以下場景:
很多人容易混淆工廠方法模式和簡單工廠模式,主要區(qū)別在于:
簡單工廠模式違反了開閉原則(對擴展開放,對修改關(guān)閉),而工廠方法模式更好地遵循了這一原則。
以下是一個文檔處理系統(tǒng)的工廠方法實現(xiàn):
`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();
}
}`
工廠方法模式是設(shè)計模式中非常重要的一種,它體現(xiàn)了"依賴倒置原則"和"開閉原則"的核心思想。通過將對象的創(chuàng)建延遲到子類,實現(xiàn)了創(chuàng)建邏輯與使用邏輯的分離,提高了系統(tǒng)的靈活性和可擴展性。
在實際開發(fā)中,當遇到需要創(chuàng)建多種類型對象、且這些對象有共同的接口或抽象類時,考慮使用工廠方法模式可以讓代碼更加清晰、易于維護和擴展。
需要注意的是,設(shè)計模式不是銀彈,過度使用可能會導致系統(tǒng)過度設(shè)計。應(yīng)根據(jù)實際需求和項目規(guī)模,合理選擇是否使用以及如何使用工廠方法模式。
如若轉(zhuǎn)載,請注明出處:http://m.quanshengdai.cn/product/51.html
更新時間:2026-04-09 18:57:43
PRODUCT