首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

設計模式入門:單例模式與工廠模式的核心概念與應用場景

     編輯:程式設計綜合問答

設計模式是軟體開發中可復用的解決方案模板。本文以淺顯易懂的方式,介紹兩大基石模式——單例與工廠——的定義、用途及實際應用時機。

單例模式

定義

確保某個類別在整個應用程式生命週期中,只存在一個實例,並提供全域存取點。

何時使用?

  • 需要頻繁建立/銷毀、且建立成本高的物件(如資料庫連線池、執行緒池)。
  • 需要全域共享狀態的管理者(如設定檔管理器、日誌記錄器)。
  • 避免多實例造成資源競爭或狀態不一致。

簡易實作(Java)

public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) instance = new Singleton();
            }
        }
        return instance;
    }
}

工廠模式

定義

定義一個建立物件的介面,讓子類別決定實例化哪個具體類別。呼叫端只需向工廠「下單」,無需知道具體建立細節。

生活化比喻

你想吃雞翅,不管去麥當勞還是肯德基,只跟服務員說「來四塊雞翅」。麥當勞、肯德基就是兩個具體工廠,都能生產「雞翅」這個產品介面。

何時使用?

  • 物件建立邏輯複雜、需封裝(如依參數決定建立不同資料庫驅動)。
  • 系統需支援多種實作且未來可能擴充(如支付介面:支付寶、微信、信用卡)。
  • 想降低呼叫端與具體類別的耦合度。

簡易實作(Java)

interface Chicken { void eat(); }
class McChicken implements Chicken { public void eat() { System.out.println("麥當勞雞翅"); } }
class KFCChicken implements Chicken { public void eat() { System.out.println("肯德基雞翅"); } }

class ChickenFactory {
    public static Chicken createChicken(String type) {
        if ("Mc".equals(type)) return new McChicken();
        if ("KFC".equals(type)) return new KFCChicken();
        throw new IllegalArgumentException("未知品牌");
    }
}

// 使用
Chicken c = ChickenFactory.createChicken("Mc");
c.eat(); // 輸出:麥當勞雞翅

比較與選擇建議

模式核心目的典型場景
單例全域唯一實例連線池、快取、設定管理
工廠封裝建立邏輯、解耦多實作切換、複雜物件組裝

結語

單例解決「只能有一個」的問題;工廠解決「誰來建立、建立什麼」的問題。掌握這兩個模式,能大幅提升程式碼的可維護性與擴充性。進階學習可參考《Head First 設計模式》或 GoF 經典著作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved