2023-08-28|閱讀時間 ‧ 約 4 分鐘

Golang - Design Pattern #18: 原型模式 (Null Object)

raw-image
🌌 優雅處理空值 🌌

在軟體開發中,處理nil或空值是一個常見的挑戰。不妥當地處理它們可能導致錯誤,使得程式碼的健壯性下降。但有沒有一種方法,可以讓我們在不做特殊檢查的情況下,優雅地處理這些空值呢?答案是肯定的,那就是空物件模式 (Null Object Pattern)!本文將深入探討如何在 Go 中使用空物件模式。


空物件模式 🌠

空物件模式的核心思想是使用一個提供了預設行為的物件,代替nilnull。這樣,當我們期望的物件不存在時,我們可以使用這個空物件,而不是返回nilnull。這通常可以減少檢查nil的次數,並提供一種更一致、可靠的方法來處理物件的不存在情況。


來點 Go


🌈 處理用戶設定

假設我們有一個系統,該系統允許用戶自定義某些設定。如果用戶沒有提供設定,我們可以使用空物件模式提供一個預設的設定。


type UserSettings interface {
GetTheme() string
}

type RealUserSettings struct {
Theme string
}

func (rus *RealUserSettings) GetTheme() string {
return rus.Theme
}

type NullUserSettings struct{}

func (nus *NullUserSettings) GetTheme() string {
return "Default Theme"
}

// Usage
var settings UserSettings

if userHasSettings {
settings = &RealUserSettings{Theme: "Dark Mode"}
} else {
settings = &NullUserSettings{}
}

theme := settings.GetTheme() // Always get a valid theme without checking for nil!


📘 處理日誌記錄

在某些情況下,我們可能只想在開發模式下記錄日誌,而在生產模式下不進行日誌記錄。這時,空物件模式可以派上用場。


type Logger interface {
Log(message string)
}

type ConsoleLogger struct{}

func (cl *ConsoleLogger) Log(message string) {
fmt.Println(message)
}

type NullLogger struct{}

func (nl *NullLogger) Log(message string) {}

// Usage
var logger Logger

if isDevelopmentMode {
logger = &ConsoleLogger{}
} else {
logger = &NullLogger{}
}

logger.Log("This is a log message.") // In production mode, this won't print anything!


小結

空物件模式為我們提供了一個優雅的方法來處理空值情況,減少了需要進行nil檢查的地方,並提高了程式碼的可讀性和健壯性🚀。該模式特別適合於那些需要預設行為或值的場景。希望這篇文章能幫助你在 Go 中更優雅地處理空值情況!

分享至
成為作者繼續創作的動力吧!
歡迎來到 Golang Lab!我們專注於提供深入的 Golang 學習體驗。透過系列文、實例項目和進階指南,探索從基礎到進階的開發技巧,包括正則表達式、併發程式設計、性能優化等。無論您是新手還是有經驗的開發者,我們都致力於協助您迅速掌握 Golang,並在實際應用中取得成功。一同學習、分享和成長!
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

發表回應

成為會員 後即可發表留言