2024-09-17|閱讀時間 ‧ 約 25 分鐘

設計模式入門:抽象工廠模式 Abstract Factory Pattern

    在學習設計模式時,可能會讓人感到困惑:「為什麼有這麼多種工廠模式?它們到底解決什麼問題?」工廠方法模式(Factory Method Pattern)提供了一種方式來建立單一物件,這個方法可以在子類中覆寫以產生不同的物件。而抽象工廠模式(Abstract Factory Pattern)在這個基礎上進一步擴展,允許我們建立一系列相關的物件,這對於需要組織和管理大型系統非常有幫助。


    今天我們來用一個GUI(圖形使用者介面)的例子解釋這個概念。


    什麼是抽象工廠模式?

    抽象工廠模式的核心思想是提供一個通用的介面,讓客戶端可以建立一系列相關的物件,而不必指定具體類型。這對於需要產生不同風格的GUI元件特別適合。比如說,你正在開發一個跨平台的應用程式,這個程式可以在Windows、macOS、Linux等多個平台上運行,每個平台都有自己獨特的界面風格。通過抽象工廠模式,你可以為每個平台生成相應的元件,而不必更改核心邏輯。


    GUI元件的應用

    假設你正在開發一個應用程式,它需要在Windows和Mac平台上執行。每個平台有自己獨特的風格,Windows有一種風格的按鈕和文字框,而Mac則有另一種風格。為了讓你的應用程式能夠適應這些不同的風格,你可以使用抽象工廠模式來解決這個問題。


    抽象工廠模式就像是一個通用的「工廠大樓」,裡面有不同的生產線(即不同的具體工廠),每條生產線專門生產特定平台的元件。當你需要產生Windows風格的按鈕和文字框時,你會去「Windows生產線」;當你需要Mac風格的元件時,就去「Mac生產線」。這樣你的程式碼只需要知道這些「生產線」,而不需要關心它們內部的具體實現。


    具體來說,這個「工廠大樓」會提供一些介面(即抽象工廠),這些介面定義了如何建立不同的元件,比如按鈕和文字框。每一條「生產線」會實現這些介面,並生產對應風格的元件。例如,Windows的生產線會生產Windows風格的按鈕和文字框,而Mac的生產線會生產Mac風格的元件。


    這樣的設計讓你的程式碼能夠輕鬆切換不同的風格,並且當你未來需要支持新的平台時,只需要新增一條「生產線」,不需要改動現有的程式碼。不僅讓你的系統更具擴展性,還能保持一致的風格,讓你的應用程式在不同平台上看起來都很協調。


    當應用程式需要按鈕和文字框時,它不需要知道具體是哪一個平台的元件,只需要知道使用哪個工廠來產生就好。


    抽象工廠模式優缺點

    抽象工廠模式的優點在於能夠幫助整體系統的一致性,像是跨平台應用的介面風格,或者像是特斯拉工廠同時生產不同車型的零件。另外當我們需要支援新的平台或改變應用風格時,只需新增一個工廠類別,讓程式碼更易於擴展。


    但它的缺點是系統的複雜性可能會增加,特別是在專案規模較小時,使用這種模式可能會顯得繁瑣。還有如果需要新增一個產品類型,所有的工廠類別都得更新,這會影響到開放封閉原則。


    總結一下,抽象工廠模式讓我們在建立一系列相關物件時,能夠保持系統的一致性和靈活性,適用於像是跨平台應用或需要不同風格元件的場景。下次面對這樣的需求時,可以考慮使用抽象工廠模式來解決問題!


    若你想要體驗設計模式的力量,看看我在iThome鐵人賽的文章吧。
    https://ithelp.ithome.com.tw/articles/10352649

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.