Golang - Design Pattern #5: 命令模式 (Command)

更新於 發佈於 閱讀時間約 2 分鐘
raw-image


命令模式:就像你的智能家居遙控器!

你有沒有用過智能家居遙控器,按一下開燈、再按一下關電視?那麼,你可能已經用過命令模式了!


命令模式到底是啥?

想像命令模式就像是你的遙控器上的一堆按鈕。每個按鈕都是一個命令,當你按下去,某些事情就會發生。你不必知道背後的具體工作原理,只需要知道按這個就能開燈,按那個就能關電視。

不囉嗦,直接看看程式碼

package main

import "fmt"

// Command 是命令的接口
type Command interface {
Execute()
}

// 開燈 Command​
type LightOnCommand struct {
Light *Light
}

func (l *LightOnCommand) Execute() {
l.Light.TurnOn()
}

// 關燈 Command
type LightOffCommand struct {
Light *Light
}

func (l *LightOffCommand) Execute() {
l.Light.TurnOff()
}

// 燈​
type Light struct{}

// 開燈
func (l *Light) TurnOn() {
fmt.Println("燈亮了!")
}

// 關燈
func (l *Light) TurnOff() {
fmt.Println("燈熄了!")
}

// Remote 遙控器
type Remote struct {
Command Command
}

func (r *Remote) PressButton() {
r.Command.Execute()
}

func main() {
light := &Light{}
lightOn := &LightOnCommand{Light: light}
lightOff := &LightOffCommand{Light: light}

remote := &Remote{}

remote.Command = lightOn
remote.PressButton()

remote.Command = lightOff
remote.PressButton()
}

這個程式碼展示了一個簡單的燈和遙控器。你可以按遙控器的按鈕來開燈或關燈,不必知道它背後是怎麼工作的。


總結

命令模式就像是我們生活中的遙控器,使我們的生活變得更加便利。在程式設計中,它可以幫助我們更好地組織和管理代碼,使我們的系統更加模組化和靈活。所以下次當你拿起遙控器時,也許會想到這背後的命令模式哦!

留言
avatar-img
留言分享你的想法!
avatar-img
KH Huang的沙龍
36會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
KH Huang的沙龍的其他內容
2023/09/06
嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!
Thumbnail
2023/09/06
嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!
Thumbnail
2023/09/03
嗨,大家好!今天我們來聊聊什麼是延遲評估模式,它的好處是啥,還有在 Go 裡面是怎麼玩的。
Thumbnail
2023/09/03
嗨,大家好!今天我們來聊聊什麼是延遲評估模式,它的好處是啥,還有在 Go 裡面是怎麼玩的。
Thumbnail
2023/09/03
在許多大型系統中,不同的子系統需要共享和修改某些資訊以達到一個共同目的。在這種情況下,傳統的方法可能會造成混亂和冗餘。這時,黑板模式出現了,它提供了一個統一的架構,讓這些子系統可以有效率地協作。
Thumbnail
2023/09/03
在許多大型系統中,不同的子系統需要共享和修改某些資訊以達到一個共同目的。在這種情況下,傳統的方法可能會造成混亂和冗餘。這時,黑板模式出現了,它提供了一個統一的架構,讓這些子系統可以有效率地協作。
Thumbnail
看更多
你可能也想看
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
我對開關很有興趣。 開關有很多種,大致可以區分為電器開關、機械開關兩種。 我對電器開關,比較有興趣。 電器開關,可以控制電流通過或不通過。 幾乎所有用電的物品,都有開關。 最常見的如電燈開關,用手開關。 開了,電流通過,燈就亮了。關了,電流不通過,燈就滅了。
Thumbnail
我對開關很有興趣。 開關有很多種,大致可以區分為電器開關、機械開關兩種。 我對電器開關,比較有興趣。 電器開關,可以控制電流通過或不通過。 幾乎所有用電的物品,都有開關。 最常見的如電燈開關,用手開關。 開了,電流通過,燈就亮了。關了,電流不通過,燈就滅了。
Thumbnail
在現代家居設計中,照明不僅僅是提供光源,更是營造氛圍、提升居家生活品質的關鍵元素。合理的照明計畫能夠改變空間的感覺,使家居環境更為舒適、溫馨。其中,直接照明與間接照明是兩種主要的照明方式,它們各有優劣,應根據實際需求靈活運用。本文將深入探討直接照明與間接照明的特點,並提供如何善用這兩種照明方式來
Thumbnail
在現代家居設計中,照明不僅僅是提供光源,更是營造氛圍、提升居家生活品質的關鍵元素。合理的照明計畫能夠改變空間的感覺,使家居環境更為舒適、溫馨。其中,直接照明與間接照明是兩種主要的照明方式,它們各有優劣,應根據實際需求靈活運用。本文將深入探討直接照明與間接照明的特點,並提供如何善用這兩種照明方式來
Thumbnail
燭光......LED 燈形成的舒適感各有不同。能否正確使用「光」,則落差甚大......
Thumbnail
燭光......LED 燈形成的舒適感各有不同。能否正確使用「光」,則落差甚大......
Thumbnail
什麼是"無主燈設計"? 「無主燈設計」是一種現代的照明方法,它擺脫了傳統使用單一燈具作為房間主要照明的做法。相反,「無主光設計」採用全般照明、任務照明和重點照明的組合來創建多層次且多功能的照明環境。目標是提供一種更細緻和靈活的照明方案,可以適應空間內的各種活動和情景。透過在整個房間分佈光源,無主燈
Thumbnail
什麼是"無主燈設計"? 「無主燈設計」是一種現代的照明方法,它擺脫了傳統使用單一燈具作為房間主要照明的做法。相反,「無主光設計」採用全般照明、任務照明和重點照明的組合來創建多層次且多功能的照明環境。目標是提供一種更細緻和靈活的照明方案,可以適應空間內的各種活動和情景。透過在整個房間分佈光源,無主燈
Thumbnail
Function的使用方式
Thumbnail
Function的使用方式
Thumbnail
▪︎咒語描述: 一個簡單金屬金色地球按鈕,金屬材質,簡單的框在物件上,使按鈕有霧面光,調整照明角度並添加反射光。淺白色漸層背景。 ▪︎工具:Copilot ▪︎咒語描述: 一個簡單金屬銀色圓形按鈕,簡單的框在物件上,使金屬按鈕有亮面光,調整照明角度並添加反射光。 按鈕上顯示琺瑯鮮黃綠色圖案:
Thumbnail
▪︎咒語描述: 一個簡單金屬金色地球按鈕,金屬材質,簡單的框在物件上,使按鈕有霧面光,調整照明角度並添加反射光。淺白色漸層背景。 ▪︎工具:Copilot ▪︎咒語描述: 一個簡單金屬銀色圓形按鈕,簡單的框在物件上,使金屬按鈕有亮面光,調整照明角度並添加反射光。 按鈕上顯示琺瑯鮮黃綠色圖案:
Thumbnail
智能家居技術的崛起,正在重塑我們的日常生活。你有想過一個問題嗎? 這究竟改變了什麼? 在這篇文章中,我們將深入探討智能家居系統的精華與其應用,助你全面了解這項正不斷進化的技術。智能家居產品如何整合入生活,以及它們的優缺點又分別為何。
Thumbnail
智能家居技術的崛起,正在重塑我們的日常生活。你有想過一個問題嗎? 這究竟改變了什麼? 在這篇文章中,我們將深入探討智能家居系統的精華與其應用,助你全面了解這項正不斷進化的技術。智能家居產品如何整合入生活,以及它們的優缺點又分別為何。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News