設計模式入門:命令模式 Command Pattern

閱讀時間約 2 分鐘

想像你正坐在一間高級餐廳裡。你不會直接走進廚房告訴廚師你想吃什麼,而是向服務生點餐。服務生記下你的要求,然後傳達給廚房。這個看似簡單的過程,其實蘊含了一個軟體設計概念,那就是命令模式 Command Pattern。今天就來聊聊這個能讓程式碼更具彈性的設計模式。 什麼是命令模式? 命令模式是一種行為設計模式,它將一個請求封裝成一個物件,這樣你可以將不同的請求用相同的方式處理。簡單來說它就像餐廳裡的點菜單,將「做什麼」與「誰來做」分離開來。 在軟體設計中,這讓我們能夠把某個操作(比如打開電燈)封裝成一個物件。這個物件包含了執行這個操作所需的所有資訊。這樣即使你不知道操作的具體內容或是接收者,你也可以執行這個操作,或者交給其他程式碼來執行。 命令模式在智慧家庭中的應用 假設你有一個智慧家庭系統,可以控制家中的各種設備,比如燈光、空調、音響等。當你想要打開燈光時,你不會直接呼叫燈光的操作介面,而是透過智慧家庭系統發出一個命令來控制燈光的開關。這就是命令模式的典型應用。 這種設計讓你可以輕鬆擴展新的設備和命令,無需修改現有的程式碼。無論是打開燈光、調節空調溫度,還是播放音樂,都可以通過這樣的命令模式來實現。 命令模式的優缺點 命令模式的優點在於它將請求的發送者和接收者解耦,讓系統更加靈活。就像在智慧家庭中,你不需要知道哪個裝置在執行命令,只需發出相應的命令即可。這樣的設計讓你可以輕鬆新增新的命令,而無需修改現有的程式碼。 命令模式也有缺點。每個具體命令都被封裝成一個單獨的類別,這可能導致系統中的類別數量暴增,使得系統變得更加複雜。另外當命令中包含大量業務邏輯時,命令類別可能會變得臃腫,違反單一職責原則。 總結一下,命令模式是一個強大且靈活的設計模式,能夠讓程式設計更具組織性和可擴展性。雖然它可能會引入一些額外的複雜度,但在許多情境下,它所帶來的好處遠遠超過其缺點。不管是智慧家庭、遊戲開發,還是企業級應用,命令模式的應用無處不在。 有興趣深入體會設計模式的朋友,可以參考我今年在iThome鐵人賽的文章。 https://ithelp.ithome.com.tw/articles/10347404

    4會員
    72內容數
    對於經營自媒體、部落格或社群媒體感興趣?我專注於提供實用的寫作技巧、數位行銷策略,以及個人成長建議。 每週,我會分享提升寫作技巧、優化部落格經營、有效管理社群媒體、以及投資理財的寶貴知識。追蹤我,獲得實用的工具和建議,讓你的個人品牌和財務管理更上一層樓!
    留言0
    查看全部
    發表第一個留言支持創作者!
    ShengYu的沙龍 的其他內容
    在生活中我們有時會遇到無法直接完成某些事情的情況,於是我們請來了一個「代理」來幫我們處理一切。比如你想買一台限量版遊戲機,但因為距離太遠或沒時間親自去購買,你就找了一個代購服務來幫你完成購買。這個代購就是你的「代理」。 在軟體設計中,代理模式 Proxy Pattern 的概念也很類似,它是一
    當你走進特斯拉的汽車工廠時,會發現這裡不僅僅是生產一款車型的工廠。無論是Model 3、Model Y、Model S還是Model X,它們都來自這個工廠,但各自有著獨特的設計和功能。這就是工廠方法模式 Factory Method Pattern 的一個生動例子。 什麼是工廠方法模式?
    在軟體開發中,有些時候我們需要確保某個類別在整個應用程式中只存在一個實例。例如當我們開發一個設定管理器時,需要保證在整個程式執行期間,所有的設定讀取和修改都要經由同一個物件。這時候單例模式就派上用場了。 什麼是單例模式? 單例模式是一種設計模式,用來確保一個類別在程式中只會有一個實例,並且提
    在資料分析的工作中,我們常常會遇到來自不同格式的資料,像是XML、CSV、或JSON。每種格式的資料都需要特定的處理方式,但其實無論資料格式如何,分析的流程大致上都是一樣的。這時候我們可以考慮用「樣板方法模式」來處理這些問題。 什麼是樣板方法模式? 簡單來說,樣板方法模式就是把一套固定的流程
    想像你在咖啡店點了一杯黑咖啡,但今天想要點不一樣的,所以你加了點牛奶,然後又加了點糖。這樣一來,原本單調的黑咖啡變得更加豐富、有層次,口感也不一樣了。在軟體開發中,我們有時也需要在不改變原來功能的前提下,為物件「加點料」,這就是裝飾者模式的精髓。 什麼是裝飾者模式? 裝飾者模式允許我們動態地
    今天你訂閱了喜歡的 YouTube 頻道。每當這個頻道上傳新影片時,你都會馬上收到通知,完全不需要主動去檢查頻道更新。在軟體開發中,我們常常需要處理類似的情況:當某個物件的狀態發生變化時,其他相關的物件會自動接收到通知,並做出相應的動作。這種場景正是可以運用觀察者模式 Observer Patter
    在生活中我們有時會遇到無法直接完成某些事情的情況,於是我們請來了一個「代理」來幫我們處理一切。比如你想買一台限量版遊戲機,但因為距離太遠或沒時間親自去購買,你就找了一個代購服務來幫你完成購買。這個代購就是你的「代理」。 在軟體設計中,代理模式 Proxy Pattern 的概念也很類似,它是一
    當你走進特斯拉的汽車工廠時,會發現這裡不僅僅是生產一款車型的工廠。無論是Model 3、Model Y、Model S還是Model X,它們都來自這個工廠,但各自有著獨特的設計和功能。這就是工廠方法模式 Factory Method Pattern 的一個生動例子。 什麼是工廠方法模式?
    在軟體開發中,有些時候我們需要確保某個類別在整個應用程式中只存在一個實例。例如當我們開發一個設定管理器時,需要保證在整個程式執行期間,所有的設定讀取和修改都要經由同一個物件。這時候單例模式就派上用場了。 什麼是單例模式? 單例模式是一種設計模式,用來確保一個類別在程式中只會有一個實例,並且提
    在資料分析的工作中,我們常常會遇到來自不同格式的資料,像是XML、CSV、或JSON。每種格式的資料都需要特定的處理方式,但其實無論資料格式如何,分析的流程大致上都是一樣的。這時候我們可以考慮用「樣板方法模式」來處理這些問題。 什麼是樣板方法模式? 簡單來說,樣板方法模式就是把一套固定的流程
    想像你在咖啡店點了一杯黑咖啡,但今天想要點不一樣的,所以你加了點牛奶,然後又加了點糖。這樣一來,原本單調的黑咖啡變得更加豐富、有層次,口感也不一樣了。在軟體開發中,我們有時也需要在不改變原來功能的前提下,為物件「加點料」,這就是裝飾者模式的精髓。 什麼是裝飾者模式? 裝飾者模式允許我們動態地
    今天你訂閱了喜歡的 YouTube 頻道。每當這個頻道上傳新影片時,你都會馬上收到通知,完全不需要主動去檢查頻道更新。在軟體開發中,我們常常需要處理類似的情況:當某個物件的狀態發生變化時,其他相關的物件會自動接收到通知,並做出相應的動作。這種場景正是可以運用觀察者模式 Observer Patter
    你可能也想看
    Thumbnail
    1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
    Thumbnail
    重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    MVVMC(Model View ViewModel Coordinator),特點是Coordinator。 Model 負責儲存應用程式的資料。 View 負責顯示資料。 ViewModel 負責處理View和Model之間的狀態關係。 Coordinator 負
    MVI(Model View Intent),特點是Intent。 Model 負責介面狀態 View 負責顯示資料。 Intent 負責將封裝後的操作告知Model。
    MVVM(Model View ViewModel),特點是View跟ViewModel之間做資料綁定。 Model 負責儲存應用程式的資料。 View 負責顯示資料。 ViewModel 負責處理View和Model之間的狀態關係。
    MVP(Model View Presenter)由MVC演變而來。MVC與MVP的差異是View跟Model之間的關係;MVC中是可以直接溝通的;MVP中是不可以直接溝通的,必須要透過 Presenter。 Model 負責資料存取。 View 負責顯示資料,並將使用者的操作傳給P
    ※ 工廠模式 定義: 工廠模式是一種實現了「工廠」概念的物件導向設計模式。它提供一個通用的工廠介面,將創建instance(實例)的程式碼交由子類別各自實現,並根據需求去動態地生成相應的物件。這種模式將物件的創建邏輯與使用邏輯分開,使程式碼更容易維護和擴展。 特點: 具有高度標準化和同質性的
    ※ 單例模式介紹 ※ 定義:單例模式是一種設計模式,確保一個class(類)只有一個實例,並提供一個存取它的全域存取點。無論如何取值,皆只對這個實例取值。 ※ 目的:保證一個類別只會產生一個物件,而且提供存取該物件的統一方法。 ※ 講解:單例模式確保一個類無論怎麼 new 或 get,都只能拿
    ※ 設計模式的五大精神介紹(S.O.L.I.D): ※ 第一大精神 — S:單一職責原則(Single responsibility principle, SRP) ※ 定義: 每個物件,不管是類別或函數,都應該只負責一項功能。 當需求改變時,僅需改相關的區域,而不需要更動其他不相關的部分
    ※ TypeScript範例說明: interface ITest { test1: string test2: number print: (arg: string[]) => boolean } class Test implements ITest { public te
    ※ 何謂Typescript? Typescript是Microsoft開發出來的一種JavaScript的擴展程式語言。 ※ 為什麼選擇 TypeScript? 靜態型別: 在執行程式碼之前就能避免許多錯誤。 幫助開發人員更快發現型別使用上的問題。 有效提升開發應用程式的效率。 輕鬆
    MVC是一種物件導向設計模式,將應用程式分成Model、View和Controller。是在1979年被提出,主要是要解決下列問題: 維護「長存儲存媒體」(Persistent Storage)的資料 維護執行流程的邏輯控制 顯示使用者所需的資訊和使用介面 Model 實作儲存應用程式
    Thumbnail
    1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
    Thumbnail
    重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    MVVMC(Model View ViewModel Coordinator),特點是Coordinator。 Model 負責儲存應用程式的資料。 View 負責顯示資料。 ViewModel 負責處理View和Model之間的狀態關係。 Coordinator 負
    MVI(Model View Intent),特點是Intent。 Model 負責介面狀態 View 負責顯示資料。 Intent 負責將封裝後的操作告知Model。
    MVVM(Model View ViewModel),特點是View跟ViewModel之間做資料綁定。 Model 負責儲存應用程式的資料。 View 負責顯示資料。 ViewModel 負責處理View和Model之間的狀態關係。
    MVP(Model View Presenter)由MVC演變而來。MVC與MVP的差異是View跟Model之間的關係;MVC中是可以直接溝通的;MVP中是不可以直接溝通的,必須要透過 Presenter。 Model 負責資料存取。 View 負責顯示資料,並將使用者的操作傳給P
    ※ 工廠模式 定義: 工廠模式是一種實現了「工廠」概念的物件導向設計模式。它提供一個通用的工廠介面,將創建instance(實例)的程式碼交由子類別各自實現,並根據需求去動態地生成相應的物件。這種模式將物件的創建邏輯與使用邏輯分開,使程式碼更容易維護和擴展。 特點: 具有高度標準化和同質性的
    ※ 單例模式介紹 ※ 定義:單例模式是一種設計模式,確保一個class(類)只有一個實例,並提供一個存取它的全域存取點。無論如何取值,皆只對這個實例取值。 ※ 目的:保證一個類別只會產生一個物件,而且提供存取該物件的統一方法。 ※ 講解:單例模式確保一個類無論怎麼 new 或 get,都只能拿
    ※ 設計模式的五大精神介紹(S.O.L.I.D): ※ 第一大精神 — S:單一職責原則(Single responsibility principle, SRP) ※ 定義: 每個物件,不管是類別或函數,都應該只負責一項功能。 當需求改變時,僅需改相關的區域,而不需要更動其他不相關的部分
    ※ TypeScript範例說明: interface ITest { test1: string test2: number print: (arg: string[]) => boolean } class Test implements ITest { public te
    ※ 何謂Typescript? Typescript是Microsoft開發出來的一種JavaScript的擴展程式語言。 ※ 為什麼選擇 TypeScript? 靜態型別: 在執行程式碼之前就能避免許多錯誤。 幫助開發人員更快發現型別使用上的問題。 有效提升開發應用程式的效率。 輕鬆
    MVC是一種物件導向設計模式,將應用程式分成Model、View和Controller。是在1979年被提出,主要是要解決下列問題: 維護「長存儲存媒體」(Persistent Storage)的資料 維護執行流程的邏輯控制 顯示使用者所需的資訊和使用介面 Model 實作儲存應用程式