日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

在Go中構建復雜對象: 構建器模式指南

來源: 責編: 時間:2024-01-15 09:20:31 220觀看
導讀構建具有許多可選參數的復雜對象可能是一項艱巨的任務。當處理具有許多可選參數的對象時,傳統構造函數和setter方法會變得很麻煩。本文將探討構建器模式(builder pattern),這是一種允許創建具有許多可選參數的復雜對象

構建具有許多可選參數的復雜對象可能是一項艱巨的任務。U0L28資訊網——每日最新資訊28at.com

當處理具有許多可選參數的對象時,傳統構造函數和setter方法會變得很麻煩。U0L28資訊網——每日最新資訊28at.com

本文將探討構建器模式(builder pattern),這是一種允許創建具有許多可選參數的復雜對象的設計模式。U0L28資訊網——每日最新資訊28at.com

U0L28資訊網——每日最新資訊28at.com

我們將介紹基于Go的構建器模式示例實現,并討論如何創建同一對象的不同變體。U0L28資訊網——每日最新資訊28at.com

+----------------+               +-------------------+|     Director   |  directs      |      Builder      |+----------------+               +-------------------+| construct()    | ------------> | buildPart1()      || setBuilder()   |               | buildPart2()      |+----------------+               | getProduct()      |                                 +-------------------+                                           |                                           V                                 +-------------------+                                 |      Product      |                                 +-------------------+                                 | field1            |                                 | field2            |                                 | ...               |                                 +-------------------+

在Go中實現構建器模式

下面是golang中構建器模式示例:U0L28資訊網——每日最新資訊28at.com

type Car struct { Make       string Model      string Year       int Color      string EngineSize float64}type CarBuilder struct { Car}func (cb *CarBuilder) SetMake(make string) *CarBuilder { cb.Make = make return cb}func (cb *CarBuilder) SetModel(model string) *CarBuilder { cb.Model = model return cb}func (cb *CarBuilder) SetYear(year int) *CarBuilder { cb.Year = year return cb}func (cb *CarBuilder) SetColor(color string) *CarBuilder { cb.Color = color return cb}func (cb *CarBuilder) SetEngineSize(engineSize float64) *CarBuilder { cb.EngineSize = engineSize return cb}func (cb *CarBuilder) Build() *Car { return &cb.Car}

CarBuilder結構嵌入了一個Car對象,所以它的所有字段都可以被構建器訪問。U0L28資訊網——每日最新資訊28at.com

CarBuilder結構具有設置Car對象可選參數的方法,每個方法返回指向CarBuilder結構體的指針,以允許鏈式調用。U0L28資訊網——每日最新資訊28at.com

CarBuilder結構體上的Build方法返回指向被構建的Car對象的指針。U0L28資訊網——每日最新資訊28at.com

下面是使用CarBuilder的例子:U0L28資訊網——每日最新資訊28at.com

carBuilder := &CarBuilder{}car := carBuilder.    SetMake("Toyota").    SetModel("Corolla").    SetYear(2021).    SetColor("Red").    SetEngineSize(1.8).    Build()fmt.Printf("Make: %s/n", car.Make) // Output: Make: Toyotafmt.Printf("Model: %s/n", car.Model) // Output: Model: Corollafmt.Printf("Year: %d/n", car.Year) // Output: Year: 2021fmt.Printf("Color: %s/n", car.Color) // Output: Color: Redfmt.Printf("Engine Size: %.1f/n", car.EngineSize) // Output: Engine Size: 1.8

在這個例子中,我們創建了一個CarBuilder對象,用它的方法來設置Car對象的可選參數。U0L28資訊網——每日最新資訊28at.com

最后調用Build方法來獲取最終的Car對象。然后打印出Car對象的字段,以驗證是否設置正確。U0L28資訊網——每日最新資訊28at.com

Go中構建器模式的高級用例

構建器模式有一些高級用例,可以在某些情況下使用。U0L28資訊網——每日最新資訊28at.com

下面介紹Go中構建器模式的一些高級用例。U0L28資訊網——每日最新資訊28at.com

創建構建器接口

在構建器模式基本示例中,有一個用于構建對象的builder結構。U0L28資訊網——每日最新資訊28at.com

不過我們可以創建builder接口,讓不同builder結構實現其接口。U0L28資訊網——每日最新資訊28at.com

當我們需要使用相同模式構建不同類型的對象時,這非常有用。U0L28資訊網——每日最新資訊28at.com

假設有兩種類型的汽車: 電動汽車和汽油汽車,有相同的可選參數,但有不同的必需參數。U0L28資訊網——每日最新資訊28at.com

在這種情況下,可以創建一個CarBuilder接口,指定構建汽車所需的方法,然后創建兩個實現CarBuilder接口的結構: ElectricCarBuilder和GasolineCarBuilder。U0L28資訊網——每日最新資訊28at.com

type CarBuilder interface { SetMake(make string) CarBuilder SetModel(model string) CarBuilder SetYear(year int) CarBuilder SetColor(color string) CarBuilder SetEngineSize(engineSize float64) CarBuilder Build() Car}type ElectricCarBuilder struct { Car}type GasolineCarBuilder struct { Car}

ElectricCarBuilder和GaslineCarBuilder都嵌入了Car結構體并實現了CarBuilder接口。U0L28資訊網——每日最新資訊28at.com

然后可以自己實現制造汽車所需的方法。U0L28資訊網——每日最新資訊28at.com

func (b *ElectricCarBuilder) SetMake(make string) CarBuilder { b.Make = make return b}func (b *ElectricCarBuilder) SetModel(model string) CarBuilder { b.Model = model return b}func (b *ElectricCarBuilder) SetYear(year int) CarBuilder { b.Year = year return b}func (b *ElectricCarBuilder) SetColor(color string) CarBuilder { b.Color = color return b}func (b *ElectricCarBuilder) SetEngineSize(engineSize float64) CarBuilder { b.EngineSize = engineSize return b}func (b *ElectricCarBuilder) Build() Car { return b.Car}func (b *GasolineCarBuilder) SetMake(make string) CarBuilder { b.Make = make return b}func (b *GasolineCarBuilder) SetModel(model string) CarBuilder { b.Model = model return b}func (b *GasolineCarBuilder) SetYear(year int) CarBuilder { b.Year = year return b}func (b *GasolineCarBuilder) SetColor(color string) CarBuilder { b.Color = color return b}func (b *GasolineCarBuilder) SetEngineSize(engineSize float64) CarBuilder { b.EngineSize = engineSize return b}func (b *GasolineCarBuilder) Build() Car { return b.Car}

我們因此可以基于接口創建汽車,也可以使用相同的接口做模擬。U0L28資訊網——每日最新資訊28at.com

func CreateCar(builder CarBuilder) Car { return builder.  SetMake("Toyota").  SetModel("Corolla").  SetYear(2022).  SetColor("blue").  SetEngineSize(2.0).  Build()}func main() { electricCarBuilder := &ElectricCarBuilder{} gasolineCarBuilder := &GasolineCarBuilder{} electricCar := CreateCar(electricCarBuilder) gasolineCar := CreateCar(gasolineCarBuilder) fmt.Printf("Electric car: %+v/n", electricCar) fmt.Printf("Gasoline car: %+v/n", gasolineCar)}

在本例中,我們創建了ElectricCarBuilder和GasolineCarBuilder,并分別創建了一輛電動車和一輛汽油車。U0L28資訊網——每日最新資訊28at.com

CreateCar函數接受CarBuilder接口,并在最后調用Build方法創建Car對象之前,使用構建器的方法設置必需的字段。U0L28資訊網——每日最新資訊28at.com

參考資料:U0L28資訊網——每日最新資訊28at.com

[1]Building Complex Objects in Go: A Guide to the Builder Pattern: https://dsysd-dev.medium.com/building-complex-objects-in-go-a-guide-to-the-builder-pattern-1a64bc0eb3eeU0L28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-60945-0.html在Go中構建復雜對象: 構建器模式指南

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 快速初始化容器化Gin項目

下一篇: 使用 Docker 進行 Go 應用程序引導指南

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 永宁县| 齐河县| 德格县| 科尔| 石首市| 洪江市| 昌邑市| 保德县| 万载县| 宜黄县| 开原市| 小金县| 司法| 五寨县| 社会| 宁蒗| 嘉峪关市| 安国市| 南川市| 景泰县| 宁津县| 收藏| 南华县| 汝州市| 沈丘县| 高安市| 中方县| 堆龙德庆县| 漳浦县| 什邡市| 澳门| 闻喜县| 白河县| 万荣县| 昌都县| 星子县| 瓮安县| 旌德县| 遵化市| 平塘县| 温州市|