溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java設計模式中工廠模式的定義及代碼演示

發布時間:2021-09-10 16:40:29 來源:億速云 閱讀:160 作者:chen 欄目:大數據
# Java設計模式中工廠模式的定義及代碼演示

## 一、工廠模式概述

工廠模式(Factory Pattern)是Java中最常用的設計模式之一,屬于**創建型模式**,主要解決對象創建過程中的靈活性問題。其核心思想是將**對象的實例化過程**與**客戶端代碼**分離,通過專門的工廠類來控制對象的創建。

### 1.1 核心作用
- 解耦:客戶端不需要知道具體類的創建細節
- 擴展性:新增產品類時不影響現有代碼
- 統一管理:集中控制對象的創建邏輯

### 1.2 三種實現形式
1. 簡單工廠模式(靜態工廠)
2. 工廠方法模式(多態工廠)
3. 抽象工廠模式(產品族工廠)

---

## 二、簡單工廠模式

### 2.1 定義
通過一個靜態方法根據傳入參數的不同返回不同類的實例。

```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的操作");
    }
}

// 簡單工廠
class SimpleFactory {
    public static Product createProduct(String type) {
        switch (type) {
            case "A":
                return new ConcreteProductA();
            case "B":
                return new ConcreteProductB();
            default:
                throw new IllegalArgumentException("未知產品類型");
        }
    }
}

// 客戶端使用
public class Client {
    public static void main(String[] args) {
        Product productA = SimpleFactory.createProduct("A");
        productA.operation();
        
        Product productB = SimpleFactory.createProduct("B");
        productB.operation();
    }
}

2.2 優缺點分析

? 優點: - 客戶端與具體實現解耦 - 代碼結構簡單

? 缺點: - 違反開閉原則(新增產品需修改工廠類) - 靜態方法無法繼承


三、工廠方法模式

3.1 定義

定義一個創建對象的接口,但讓子類決定實例化哪個類。

// 抽象工廠
interface Factory {
    Product createProduct();
}

// 具體工廠A
class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具體工廠B
class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// 客戶端使用
public class Client {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.operation();
        
        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.operation();
    }
}

3.2 類圖結構

[客戶端] --> [抽象工廠]
[抽象工廠] <|-- [具體工廠A]
[抽象工廠] <|-- [具體工廠B]

3.3 適用場景

  • 客戶端不知道它需要的具體類
  • 需要靈活擴展新產品時

四、抽象工廠模式

4.1 定義

提供一個接口,用于創建相關或依賴對象家族,而不需要明確指定具體類。

// 抽象產品族
interface Button {
    void render();
}

interface Checkbox {
    void check();
}

// 具體產品族1
class WindowsButton implements Button {
    public void render() {
        System.out.println("Windows風格按鈕");
    }
}

class WindowsCheckbox implements Checkbox {
    public void check() {
        System.out.println("Windows復選框選中");
    }
}

// 具體產品族2
class MacButton implements Button {
    public void render() {
        System.out.println("Mac風格按鈕");
    }
}

// 抽象工廠
interface GUIFactory {
    Button createButton();
    Checkbox createCheckbox();
}

// 具體工廠實現
class WindowsFactory implements GUIFactory {
    public Button createButton() {
        return new WindowsButton();
    }
    public Checkbox createCheckbox() {
        return new WindowsCheckbox();
    }
}

class MacFactory implements GUIFactory {
    public Button createButton() {
        return new MacButton();
    }
    // MacCheckbox實現省略...
}

4.2 模式特點

  • 強調產品族概念
  • 適合系統需要多個協同工作的對象
  • JDBC就是典型應用

五、三種工廠模式對比

對比維度 簡單工廠 工廠方法 抽象工廠
創建對象 單一產品 單一產品 產品族
擴展方式 修改工廠類 新增工廠子類 新增工廠子類
復雜度 簡單 中等 復雜
典型應用場景 對象創建邏輯簡單 需要靈活擴展產品 需要創建相關對象組

六、實際應用案例

6.1 Spring中的工廠模式

// BeanFactory就是典型的工廠接口
BeanFactory factory = new XmlBeanFactory(...);
Object obj = factory.getBean("beanName");

6.2 JDK中的實例

// Collection的iterator()方法
List<String> list = Arrays.asList("A", "B");
Iterator<String> it = list.iterator(); // 隱藏具體迭代器實現

七、總結

工廠模式的核心價值在于: 1. 將對象創建與使用分離 2. 降低代碼耦合度 3. 提高系統的可擴展性

在實際開發中,應根據業務復雜度選擇合適的形式。簡單場景用簡單工廠,復雜產品族建議使用抽象工廠,大多數情況下工廠方法是最平衡的選擇。 “`

(注:全文約1450字,可根據需要調整代碼示例的詳細程度)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女