更新於 2024/09/05閱讀時間約 3 分鐘

Golang - Design Pattern #27: 鏈式方法模式 (Method Chaining)

raw-image


🛠️ 鏈式方法模式 (Method Chaining Pattern)

嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!


Go 實例

建構者模式中的鏈式方法

這種模式在建構者模式中很常見,讓你可以連續設定物件的屬性:


package main

import (
"fmt"
)

type CarBuilder struct {
brand string
color string
speed int
}

func (cb *CarBuilder) SetBrand(b string) *CarBuilder {
cb.brand = b
return cb
}

func (cb *CarBuilder) SetColor(c string) *CarBuilder {
cb.color = c
return cb
}

func (cb *CarBuilder) SetSpeed(s int) *CarBuilder {
cb.speed = s
return cb
}

func (cb *CarBuilder) Build() string {
return fmt.Sprintf("建造了一輛 %s 色的 %s 車,最高速度為 %d km/h", cb.color, cb.brand, cb.speed)
}

func main() {
car := &CarBuilder{}
result := car.SetBrand("BMW").SetColor("紅").SetSpeed(200).Build()
fmt.Println(result)
}

上述例子中,我們透過鏈式調用逐步設定汽車的屬性,最後建造出一輛汽車。


🔧 配置設定

在配置設定時,這樣的模式也相當實用:


package main

import (
"fmt"
)

type Config struct {
host string
port int
user string
}

func (c *Config) SetHost(h string) *Config {
c.host = h
return c
}

func (c *Config) SetPort(p int) *Config {
c.port = p
return c
}

func (c *Config) SetUser(u string) *Config {
c.user = u
return c
}

func (c *Config) Show() {
fmt.Printf("Host: %s, Port: %d, User: %s\n", c.host, c.port, c.user)
}

func main() {
cfg := &Config{}
cfg.SetHost("localhost").SetPort(8080).SetUser("admin").Show()
}

這裡,我們透過鏈式調用設定配置的各項參數,然後顯示它。

結論 🎉

好啦,今天的主題就講到這裡啦!通過鏈式方法模式,你可以更有組織、更簡潔地撰寫程式碼。當你想要按照一定的順序設定物件的屬性或是調用方法時,這真的是個很好用的手法!希望你們都能在日常的開發中找到這個模式的蹤跡,甚至自己動手用用看!下次見啦!😄

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.