Golang - Design Pattern #14: 外觀模式 (Facade)

閱讀時間約 5 分鐘
raw-image
🏢 簡化複雜系統介面 🏢

你知道那種感覺嗎?當你想從複雜的家電系統中只開啟你的電視和音響,卻需要找一大堆遙控器才能完成。外觀模式(Facade)就是這樣的解決方案!它可以幫助我們簡化複雜系統的操作,提供一個單一、簡單的接口。


外觀模式 🖥️🎛️

外觀模式的主要目的是隱藏系統的複雜性,並提供一個客戶端可以輕鬆訪問的接口。它不只是關於隱藏複雜性,而是提供一個有意義的、統一的接口。


實際的例子


🎮 娛樂系統

想像一下你家裡有一套豪華的娛樂系統:電視、音響、遊戲機和燈光系統。你每次要看電影都得開啟電視、調整音響、關掉燈和打開遊戲機。太麻煩了!所以我們要用外觀模式來簡化這一切。


package main

import "fmt"

// 子系統1
type Television struct{}
func (tv *Television) TurnOn() { fmt.Println("Turning on the TV!") }

// 子系統2
type SoundSystem struct{}
func (ss *SoundSystem) SetVolume() { fmt.Println("Setting volume to medium!") }

// 子系統3
type Lights struct{}
func (l *Lights) Dim() { fmt.Println("Dimming the lights!") }

// 外觀
type HomeTheaterFacade struct {
tv Television
ss SoundSystem
l Lights
}

func (htf *HomeTheaterFacade) WatchMovie() {
htf.tv.TurnOn()
htf.ss.SetVolume()
htf.l.Dim()
fmt.Println("Ready to watch a movie!")
}

func main() {
ht := HomeTheaterFacade{}
ht.WatchMovie()
}

在上面的例子中,我們有 Television, SoundSystemLights。這些都是複雜的子系統,我們通常需要多步驟操作它們。但透過外觀模式,我們將這些子系統的操作封裝在 HomeTheaterFacade 裡,提供一個 WatchMovie 的方法,讓我們可以一鍵完成所有操作!


☕ 咖啡機

想像一下,你有一台全自動的咖啡機,它可以磨咖啡豆、加熱水、攪拌,然後為你製作一杯完美的咖啡。但如果每次你想喝咖啡時,都需要手動操作每一步驟,這會讓人覺得很不方便。因此,我們可以用外觀模式來封裝所有這些操作,並提供一個一鍵製作咖啡的方法。


package main

import "fmt"

// 子系統1
type Grinder struct{}
func (g *Grinder) GrindBeans() { fmt.Println("Grinding the coffee beans!") }

// 子系統2
type Heater struct{}
func (h *Heater) HeatWater() { fmt.Println("Heating the water!") }

// 子系統3
type Mixer struct{}
func (m *Mixer) Mix() { fmt.Println("Mixing the coffee!") }

// 外觀
type CoffeeMachineFacade struct {
grinder Grinder
heater Heater
mixer Mixer
}

func (cm *CoffeeMachineFacade) MakeCoffee() {
cm.grinder.GrindBeans()
cm.heater.HeatWater()
cm.mixer.Mix()
fmt.Println("Your coffee is ready!")
}

func main() {
coffeeMachine := CoffeeMachineFacade{}
coffeeMachine.MakeCoffee()
}

在這個例子中,我們的 Grinder, HeaterMixer 分別代表咖啡機的磨豆、加熱和攪拌功能。這些操作可能各自涉及到很多細節和步驟,但我們不希望使用者需要瞭解所有這些。


結論 🎉

外觀模式是一個超實用的設計模式,它幫助我們隱藏複雜的子系統操作,提供一個簡單的接口。就像我們的娛樂系統例子,現在只需要一個按鈕,就能輕鬆觀影了!

avatar-img
31會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
KH Huang的沙龍 的其他內容
你還記得在學校時代,當兩位朋友吵架時,有時會有第三者出來做調解嗎?在程式設計中,我們有一種模式就像那位調解者,幫助兩個物件之間保持距離,這就是仲介者模式( Mediator Pattern )!
你還記得那次與朋友一起的燒烤派對,大家輪流挑選食材放到烤架上烤嗎?這就好比使用迭代器模式 (Iterator Pattern) 來遍歷集合!讓我們一起來看看它是如何工作的,以及為什麼它如此有用。
你有沒有試著畫出家族樹或公司組織架構圖呢?如果有,那你其實已經初步了解「組合模式 (Composite Pattern)」了!這種模式就是用來處理這類包含部分和整體的樹狀結構。這篇文章,我們就來深入探討它是如何運作的。
嗨,各位!想像一下你住在一棟大樓里,每次有人要進來時,他們得先經過樓下的門禁員檢查,這樣才能確保大樓的安全。在程式設計的世界裡,我們也有類似的機制,那就是「代理模式 (Proxy Pattern)」!
嗨,各位!大家有沒有買過新的手機或筆電,然後發現充電線插頭跟你家的插座不匹配?這時候你會怎麼辦?找個轉接頭來用對吧!今天我們就來聊聊在程式設計中的「轉接頭」── 適配器模式(Adapter Pattern)!
大家好!今天我們要來聊聊「狀態模式 (State)」。如果你把物件想像成一個人,那麼狀態模式就是用來管理這個人的 「心情」轉變。一個物件在不同的狀態下可能會有不同的行為,就好像我們在不同的心情下反應也不同,對吧?
你還記得在學校時代,當兩位朋友吵架時,有時會有第三者出來做調解嗎?在程式設計中,我們有一種模式就像那位調解者,幫助兩個物件之間保持距離,這就是仲介者模式( Mediator Pattern )!
你還記得那次與朋友一起的燒烤派對,大家輪流挑選食材放到烤架上烤嗎?這就好比使用迭代器模式 (Iterator Pattern) 來遍歷集合!讓我們一起來看看它是如何工作的,以及為什麼它如此有用。
你有沒有試著畫出家族樹或公司組織架構圖呢?如果有,那你其實已經初步了解「組合模式 (Composite Pattern)」了!這種模式就是用來處理這類包含部分和整體的樹狀結構。這篇文章,我們就來深入探討它是如何運作的。
嗨,各位!想像一下你住在一棟大樓里,每次有人要進來時,他們得先經過樓下的門禁員檢查,這樣才能確保大樓的安全。在程式設計的世界裡,我們也有類似的機制,那就是「代理模式 (Proxy Pattern)」!
嗨,各位!大家有沒有買過新的手機或筆電,然後發現充電線插頭跟你家的插座不匹配?這時候你會怎麼辦?找個轉接頭來用對吧!今天我們就來聊聊在程式設計中的「轉接頭」── 適配器模式(Adapter Pattern)!
大家好!今天我們要來聊聊「狀態模式 (State)」。如果你把物件想像成一個人,那麼狀態模式就是用來管理這個人的 「心情」轉變。一個物件在不同的狀態下可能會有不同的行為,就好像我們在不同的心情下反應也不同,對吧?
你可能也想看
Google News 追蹤
Thumbnail
在現代居家設計中,照明已不僅僅是滿足基本功能的工具,而是一種提升生活質感的關鍵因素。透過用心規劃設計的照明方案,我們可以改變空間的氛圍,突出裝飾細節,甚至影響住戶的心情與健康。本文將探討如何透過照明設計,打造出高質感的居家空間,讓每一個家庭成員都能感受到舒適與愉悅。 一、認識照明三大類型 在
Thumbnail
客廳收納Part1:清潔客廳的電視櫃、展示櫃、展示層架的技巧 客廳,是家庭核心活動的中心,不管是接待客人、談生意、甚至是全家遊戲房,擁有整潔有序的客廳空間能大幅的提升居住品質,讓人倍感舒適。相信愛家的你,會好奇如何清潔和整理客廳中的電視櫃、展示櫃和展示層架,讓這些重要家具焕然一新。
Thumbnail
在室內設計的領域中,照明設計是非常重要的一環。精心規劃的照明設計不僅能提升空間的美感,還能創造出不同的氛圍,滿足業主、居住者的多樣需求。本文將介紹三種主要的照明手法:全般照明、重點照明與功能照明,幫助室內設計師更好地運用光影藝術,打造出理想的居住環境。 全般照明 全般照明(General L
Thumbnail
在室內設計和氛圍營造部分,照明設計有著至關重要的作用。它不僅僅是照亮一個空間,更涉及打造優質生活體驗、營造氛圍和增強功能。照明設計專案包含各個領域,從家庭、辦公室等室內空間,到室外景觀和商業場所。照明設計為每個空間帶來獨特的價值與貢獻,促使設計師和工程師進行創新,創造出將美觀與功能融為一體的解決
Thumbnail
在生活中,有時候實用比花俏更加重要。像是床頭閱讀燈到床邊踢腳燈的設計。對於長輩的來說,能夠安心且舒適的照著自己的生活步調生活,便能夠讓身心都感到開心。
Thumbnail
規劃客廳照明有諸多層面需要考量,以確保空間光線充足、溫馨且實用。首先必須運用三大照明手法做規劃,全般照明、重點照明以及功能照明。此外,採用各種登具作照明搭配組合更是不可或缺! 例如吊燈、落地燈、壁燈、崁燈、軌道照明以及磁吸式燈具等。
Thumbnail
智能家居技術的崛起,正在重塑我們的日常生活。你有想過一個問題嗎? 這究竟改變了什麼? 在這篇文章中,我們將深入探討智能家居系統的精華與其應用,助你全面了解這項正不斷進化的技術。智能家居產品如何整合入生活,以及它們的優缺點又分別為何。
在各別的一個家庭之中,客廳和餐廳還有房間等,擔負著重要的功能,既是親朋相聚小坐品茗的區域地方,又是欣賞影音及兒童娛樂的區域。而在現在的很多戶型中,客餐廳往往連為一體,但它們卻有各自不同的功能,如何解決各種活動之間相互干擾的問題? 因此,我們透過些許的在具體的裝修過程中,客聽與餐廳就應該更加講究。既要
Thumbnail
曾經,系統櫃總被貼上:設計廉價、呆板的標籤。現在的系統櫃設計,早已打破過去的想像,已經變得豐富,更能彈性客製化,貼合整體的設計風格。 特別是客廳系統櫃,近年在許多室內設計師的設計下,已經華麗大變身;從原本的樸實收納導向,現在已進化成可收納,可融合風格,可配色......甚至是放在客廳門面都會十分有
Thumbnail
【智能居家市場蓬勃發展,結合AIoT與時尚創立智能居家品牌PLUSONE,打造更便利的居家體驗。(圖/加一智聯提供)】 【李婉如/ 報導】數位化時代,物聯網(IoT)智慧家電正以前所未有的速度改變生活方式,遠端啟動家中空調、窗簾、電視、電燈等,這樣的生活正在進行,「家」是一個生活型態的
Thumbnail
在現代居家設計中,照明已不僅僅是滿足基本功能的工具,而是一種提升生活質感的關鍵因素。透過用心規劃設計的照明方案,我們可以改變空間的氛圍,突出裝飾細節,甚至影響住戶的心情與健康。本文將探討如何透過照明設計,打造出高質感的居家空間,讓每一個家庭成員都能感受到舒適與愉悅。 一、認識照明三大類型 在
Thumbnail
客廳收納Part1:清潔客廳的電視櫃、展示櫃、展示層架的技巧 客廳,是家庭核心活動的中心,不管是接待客人、談生意、甚至是全家遊戲房,擁有整潔有序的客廳空間能大幅的提升居住品質,讓人倍感舒適。相信愛家的你,會好奇如何清潔和整理客廳中的電視櫃、展示櫃和展示層架,讓這些重要家具焕然一新。
Thumbnail
在室內設計的領域中,照明設計是非常重要的一環。精心規劃的照明設計不僅能提升空間的美感,還能創造出不同的氛圍,滿足業主、居住者的多樣需求。本文將介紹三種主要的照明手法:全般照明、重點照明與功能照明,幫助室內設計師更好地運用光影藝術,打造出理想的居住環境。 全般照明 全般照明(General L
Thumbnail
在室內設計和氛圍營造部分,照明設計有著至關重要的作用。它不僅僅是照亮一個空間,更涉及打造優質生活體驗、營造氛圍和增強功能。照明設計專案包含各個領域,從家庭、辦公室等室內空間,到室外景觀和商業場所。照明設計為每個空間帶來獨特的價值與貢獻,促使設計師和工程師進行創新,創造出將美觀與功能融為一體的解決
Thumbnail
在生活中,有時候實用比花俏更加重要。像是床頭閱讀燈到床邊踢腳燈的設計。對於長輩的來說,能夠安心且舒適的照著自己的生活步調生活,便能夠讓身心都感到開心。
Thumbnail
規劃客廳照明有諸多層面需要考量,以確保空間光線充足、溫馨且實用。首先必須運用三大照明手法做規劃,全般照明、重點照明以及功能照明。此外,採用各種登具作照明搭配組合更是不可或缺! 例如吊燈、落地燈、壁燈、崁燈、軌道照明以及磁吸式燈具等。
Thumbnail
智能家居技術的崛起,正在重塑我們的日常生活。你有想過一個問題嗎? 這究竟改變了什麼? 在這篇文章中,我們將深入探討智能家居系統的精華與其應用,助你全面了解這項正不斷進化的技術。智能家居產品如何整合入生活,以及它們的優缺點又分別為何。
在各別的一個家庭之中,客廳和餐廳還有房間等,擔負著重要的功能,既是親朋相聚小坐品茗的區域地方,又是欣賞影音及兒童娛樂的區域。而在現在的很多戶型中,客餐廳往往連為一體,但它們卻有各自不同的功能,如何解決各種活動之間相互干擾的問題? 因此,我們透過些許的在具體的裝修過程中,客聽與餐廳就應該更加講究。既要
Thumbnail
曾經,系統櫃總被貼上:設計廉價、呆板的標籤。現在的系統櫃設計,早已打破過去的想像,已經變得豐富,更能彈性客製化,貼合整體的設計風格。 特別是客廳系統櫃,近年在許多室內設計師的設計下,已經華麗大變身;從原本的樸實收納導向,現在已進化成可收納,可融合風格,可配色......甚至是放在客廳門面都會十分有
Thumbnail
【智能居家市場蓬勃發展,結合AIoT與時尚創立智能居家品牌PLUSONE,打造更便利的居家體驗。(圖/加一智聯提供)】 【李婉如/ 報導】數位化時代,物聯網(IoT)智慧家電正以前所未有的速度改變生活方式,遠端啟動家中空調、窗簾、電視、電燈等,這樣的生活正在進行,「家」是一個生活型態的