# 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();
}
}
? 優點: - 客戶端與具體實現解耦 - 代碼結構簡單
? 缺點: - 違反開閉原則(新增產品需修改工廠類) - 靜態方法無法繼承
定義一個創建對象的接口,但讓子類決定實例化哪個類。
// 抽象工廠
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();
}
}
[客戶端] --> [抽象工廠]
[抽象工廠] <|-- [具體工廠A]
[抽象工廠] <|-- [具體工廠B]
提供一個接口,用于創建相關或依賴對象家族,而不需要明確指定具體類。
// 抽象產品族
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實現省略...
}
對比維度 | 簡單工廠 | 工廠方法 | 抽象工廠 |
---|---|---|---|
創建對象 | 單一產品 | 單一產品 | 產品族 |
擴展方式 | 修改工廠類 | 新增工廠子類 | 新增工廠子類 |
復雜度 | 簡單 | 中等 | 復雜 |
典型應用場景 | 對象創建邏輯簡單 | 需要靈活擴展產品 | 需要創建相關對象組 |
// BeanFactory就是典型的工廠接口
BeanFactory factory = new XmlBeanFactory(...);
Object obj = factory.getBean("beanName");
// Collection的iterator()方法
List<String> list = Arrays.asList("A", "B");
Iterator<String> it = list.iterator(); // 隱藏具體迭代器實現
工廠模式的核心價值在于: 1. 將對象創建與使用分離 2. 降低代碼耦合度 3. 提高系統的可擴展性
在實際開發中,應根據業務復雜度選擇合適的形式。簡單場景用簡單工廠,復雜產品族建議使用抽象工廠,大多數情況下工廠方法是最平衡的選擇。 “`
(注:全文約1450字,可根據需要調整代碼示例的詳細程度)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。