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

更新 發佈閱讀 3 分鐘

在學習設計模式時,可能會讓人感到困惑:「為什麼有這麼多種工廠模式?它們到底解決什麼問題?」工廠方法模式(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

留言
avatar-img
留言分享你的想法!
avatar-img
ShengYu的沙龍
6會員
83內容數
對於經營自媒體、部落格或社群媒體感興趣?我專注於提供實用的寫作技巧、數位行銷策略,以及個人成長建議。 每週,我會分享提升寫作技巧、優化部落格經營、有效管理社群媒體、以及投資理財的寶貴知識。追蹤我,獲得實用的工具和建議,讓你的個人品牌和財務管理更上一層樓!
ShengYu的沙龍的其他內容
2024/10/01
最近看到許多有關職場的文章,讓我感觸良多,也想分享一些想法。 當公司遇到財務問題時,裁員往往是最直接的方法。這時候無論你是公司創始元老,還是奉獻多年的資深員工,公司都只看數字。薪水高的、資深的員工,常常會是第一批被裁的對象。 你也許會想:「我對公司有那麼多貢獻,為什麼還會被裁?」但現實是
2024/10/01
最近看到許多有關職場的文章,讓我感觸良多,也想分享一些想法。 當公司遇到財務問題時,裁員往往是最直接的方法。這時候無論你是公司創始元老,還是奉獻多年的資深員工,公司都只看數字。薪水高的、資深的員工,常常會是第一批被裁的對象。 你也許會想:「我對公司有那麼多貢獻,為什麼還會被裁?」但現實是
2024/09/30
在職場上,許多人都會面臨不快樂的情境,可能是因為壓力、工作與生活不平衡、或是缺乏成就感。你是不是也有過這樣的感覺?今天我想分享我最近看到一個成功人士在職場上讓工作變得更快樂的方法與心態轉變的秘訣。 主動爭取機會,掌握主動權 在職場中,最不快樂的感覺往往來自於被動接受工作。如果你總是被丟一堆工
2024/09/30
在職場上,許多人都會面臨不快樂的情境,可能是因為壓力、工作與生活不平衡、或是缺乏成就感。你是不是也有過這樣的感覺?今天我想分享我最近看到一個成功人士在職場上讓工作變得更快樂的方法與心態轉變的秘訣。 主動爭取機會,掌握主動權 在職場中,最不快樂的感覺往往來自於被動接受工作。如果你總是被丟一堆工
2024/09/29
軟體開發中,我們經常會遇到各種令人抓狂的設計問題。有時候是趕進度的壓力讓我們妥協了設計質量;有時候是忽略了好的設計原則,結果掉進了各種反模式的坑裡。今天我們來繼續聊聊幾個常見的反模式。 寫死 Hard Code 直接將資料值或邏輯硬寫死在程式碼裡,當需求變更時,修改這些 Hard Code
2024/09/29
軟體開發中,我們經常會遇到各種令人抓狂的設計問題。有時候是趕進度的壓力讓我們妥協了設計質量;有時候是忽略了好的設計原則,結果掉進了各種反模式的坑裡。今天我們來繼續聊聊幾個常見的反模式。 寫死 Hard Code 直接將資料值或邏輯硬寫死在程式碼裡,當需求變更時,修改這些 Hard Code
看更多
你可能也想看
Thumbnail
身為一個喜歡閱讀的人,讀書、借書、買書、送書、推書(推廣閱讀)我都做過。 大家常用的社群平台,雞蛋哥幾乎都試過在上面分享讀書心得,做過幾次錄說書影片,也曾上過廣播節目分享書籍,近期也開始嘗試錄製說書音檔,希望能讓更多的人,對閱讀開始產生興趣。 我也追蹤一些推廣閱讀的網紅、閱讀帳(會在社群固定
Thumbnail
身為一個喜歡閱讀的人,讀書、借書、買書、送書、推書(推廣閱讀)我都做過。 大家常用的社群平台,雞蛋哥幾乎都試過在上面分享讀書心得,做過幾次錄說書影片,也曾上過廣播節目分享書籍,近期也開始嘗試錄製說書音檔,希望能讓更多的人,對閱讀開始產生興趣。 我也追蹤一些推廣閱讀的網紅、閱讀帳(會在社群固定
Thumbnail
蝦皮分潤計畫的註冊流程超簡單、超方便! 想成為推廣達人,一起把興趣變成收入嗎? 【蝦皮 12.12 狂歡生日慶】 📌 全站$99起免運 📌 刷卡回饋12%起 📌 滿千現折$200 📌 品牌熱銷6折起
Thumbnail
蝦皮分潤計畫的註冊流程超簡單、超方便! 想成為推廣達人,一起把興趣變成收入嗎? 【蝦皮 12.12 狂歡生日慶】 📌 全站$99起免運 📌 刷卡回饋12%起 📌 滿千現折$200 📌 品牌熱銷6折起
Thumbnail
這篇內容,將會講解什麼是方法,以及與方法相關的知識。包括定義Method、Method Variable 方法變數、跨區使用Method、使用函式時要注意括號。
Thumbnail
這篇內容,將會講解什麼是方法,以及與方法相關的知識。包括定義Method、Method Variable 方法變數、跨區使用Method、使用函式時要注意括號。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
最近觀察到許多網站有一個特性,就是有些網站會使用不同的模板做同一個關鍵字。 很多開發者在做產品的時候會有一個特性,就是會使用相同的模板。使用相同模板的好處不外乎是減少重複開發的時間、快速上站。 因為其實在程式開發中有很多功能可能是相似甚至是重複的。在這種情況下我們不應該重複去開發相同功能,而
Thumbnail
最近觀察到許多網站有一個特性,就是有些網站會使用不同的模板做同一個關鍵字。 很多開發者在做產品的時候會有一個特性,就是會使用相同的模板。使用相同模板的好處不外乎是減少重複開發的時間、快速上站。 因為其實在程式開發中有很多功能可能是相似甚至是重複的。在這種情況下我們不應該重複去開發相同功能,而
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
Thumbnail
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News