【工廠方法模式】工廠方法模式是一種創(chuàng)建型設(shè)計(jì)模式,它定義了一個(gè)創(chuàng)建對(duì)象的接口,但讓子類決定實(shí)例化哪一個(gè)類。工廠方法將對(duì)象的創(chuàng)建延遲到子類中進(jìn)行,使得系統(tǒng)更加靈活和可擴(kuò)展。
一、工廠方法模式簡(jiǎn)介
工廠方法模式的核心思想是:將對(duì)象的創(chuàng)建過程封裝在一個(gè)單獨(dú)的方法中,由子類來實(shí)現(xiàn)具體的創(chuàng)建邏輯。這種方式避免了在代碼中直接使用`new`關(guān)鍵字來實(shí)例化對(duì)象,從而提高了系統(tǒng)的靈活性和可維護(hù)性。
該模式適用于以下場(chǎng)景:
- 當(dāng)一個(gè)類不知道它所要?jiǎng)?chuàng)建的對(duì)象的類時(shí);
- 當(dāng)一個(gè)類希望其子類來指定它所創(chuàng)建的對(duì)象時(shí);
- 當(dāng)需要解耦對(duì)象的創(chuàng)建與使用。
二、工廠方法模式結(jié)構(gòu)
工廠方法模式包含以下幾個(gè)核心角色:
| 角色 | 說明 |
| 抽象產(chǎn)品(Product) | 定義產(chǎn)品的接口,所有具體產(chǎn)品都實(shí)現(xiàn)這個(gè)接口。 |
| 具體產(chǎn)品(Concrete Product) | 實(shí)現(xiàn)抽象產(chǎn)品接口的具體類。 |
| 抽象工廠(Factory) | 聲明工廠方法,返回抽象產(chǎn)品類型的對(duì)象。 |
| 具體工廠(Concrete Factory) | 實(shí)現(xiàn)工廠方法,返回具體產(chǎn)品類的實(shí)例。 |
三、工廠方法模式優(yōu)缺點(diǎn)
| 優(yōu)點(diǎn) | 缺點(diǎn) |
| 1. 將對(duì)象的創(chuàng)建與使用分離,提高系統(tǒng)的靈活性; 2. 符合開閉原則,易于擴(kuò)展新類型; 3. 提高代碼的可維護(hù)性和可測(cè)試性。 | 1. 增加了系統(tǒng)的復(fù)雜度; 2. 需要為每個(gè)具體產(chǎn)品創(chuàng)建一個(gè)具體工廠類; 3. 對(duì)于簡(jiǎn)單對(duì)象來說,可能顯得過于復(fù)雜。 |
四、工廠方法模式示例
下面是一個(gè)簡(jiǎn)單的工廠方法模式示例:
```java
// 抽象產(chǎn)品
interface Product {
void use();
}
// 具體產(chǎn)品A
class ProductA implements Product {
public void use() {
System.out.println("使用產(chǎn)品A");
}
}
// 具體產(chǎn)品B
class ProductB implements Product {
public void use() {
System.out.println("使用產(chǎn)品B");
}
}
// 抽象工廠
interface Factory {
Product createProduct();
}
// 具體工廠A
class FactoryA implements Factory {
public Product createProduct() {
return new ProductA();
}
}
// 具體工廠B
class FactoryB implements Factory {
public Product createProduct() {
return new ProductB();
}
}
// 使用示例
public class Client {
public static void main(String[] args) {
Factory factory = new FactoryA();
Product product = factory.createProduct();
product.use(); // 輸出:使用產(chǎn)品A
}
}
```
五、總結(jié)
工廠方法模式通過將對(duì)象的創(chuàng)建過程交給子類處理,實(shí)現(xiàn)了對(duì)象創(chuàng)建與使用的解耦。它提高了系統(tǒng)的靈活性和可擴(kuò)展性,特別適合需要?jiǎng)討B(tài)創(chuàng)建不同對(duì)象的場(chǎng)景。雖然增加了類的數(shù)量,但在大型項(xiàng)目中,這種模式有助于提高代碼的可維護(hù)性和可測(cè)試性。
| 模式名稱 | 工廠方法模式 |
| 類型 | 創(chuàng)建型設(shè)計(jì)模式 |
| 核心思想 | 將對(duì)象的創(chuàng)建延遲到子類中進(jìn)行 |
| 主要目的 | 解耦對(duì)象的創(chuàng)建與使用 |
| 適用場(chǎng)景 | 需要?jiǎng)討B(tài)創(chuàng)建不同對(duì)象的情況 |


