最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go構(gòu)建器模式構(gòu)建復(fù)雜對(duì)象方法實(shí)例

 更新時(shí)間:2023年12月15日 11:12:48   作者:俞凡  
本文介紹了構(gòu)建器模式,如何通過(guò)構(gòu)建器對(duì)象構(gòu)建復(fù)雜業(yè)務(wù)對(duì)象的方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

構(gòu)建具有許多可選參數(shù)的復(fù)雜對(duì)象可能是一項(xiàng)艱巨的任務(wù)。

當(dāng)處理具有許多可選參數(shù)的對(duì)象時(shí),傳統(tǒng)構(gòu)造函數(shù)和 setter 方法會(huì)變得很麻煩。

本文將探討構(gòu)建器模式(builder pattern),這是一種允許創(chuàng)建具有許多可選參數(shù)的復(fù)雜對(duì)象的設(shè)計(jì)模式。

我們將介紹基于 Go 的構(gòu)建器模式示例實(shí)現(xiàn),并討論如何創(chuàng)建同一對(duì)象的不同變體。

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

在 Go 中實(shí)現(xiàn)構(gòu)建器模式

下面是 golang 中構(gòu)建器模式示例

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結(jié)構(gòu)嵌入了一個(gè)Car對(duì)象,所以它的所有字段都可以被構(gòu)建器訪問(wèn)。

CarBuilder結(jié)構(gòu)具有設(shè)置Car對(duì)象可選參數(shù)的方法,每個(gè)方法返回指向CarBuilder結(jié)構(gòu)體的指針,以允許鏈?zhǔn)秸{(diào)用。

CarBuilder結(jié)構(gòu)體上的Build方法返回指向被構(gòu)建的Car對(duì)象的指針。

使用CarBuilder的例子

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: Toyota
fmt.Printf("Model: %s\n", car.Model) // Output: Model: Corolla
fmt.Printf("Year: %d\n", car.Year) // Output: Year: 2021
fmt.Printf("Color: %s\n", car.Color) // Output: Color: Red
fmt.Printf("Engine Size: %.1f\n", car.EngineSize) // Output: Engine Size: 1.8

在這個(gè)例子中,我們創(chuàng)建了一個(gè)CarBuilder對(duì)象,用它的方法來(lái)設(shè)置Car對(duì)象的可選參數(shù)。

最后調(diào)用Build方法來(lái)獲取最終的Car對(duì)象。然后打印出Car對(duì)象的字段,以驗(yàn)證是否設(shè)置正確。

Go 中構(gòu)建器模式的高級(jí)用例

構(gòu)建器模式有一些高級(jí)用例,可以在某些情況下使用。

下面介紹 Go 中構(gòu)建器模式的一些高級(jí)用例。

創(chuàng)建構(gòu)建器接口

在構(gòu)建器模式基本示例中,有一個(gè)用于構(gòu)建對(duì)象的 builder 結(jié)構(gòu)。

不過(guò)我們可以創(chuàng)建 builder 接口,讓不同 builder 結(jié)構(gòu)實(shí)現(xiàn)其接口。

當(dāng)我們需要使用相同模式構(gòu)建不同類(lèi)型的對(duì)象時(shí),這非常有用。

假設(shè)有兩種類(lèi)型的汽車(chē): 電動(dòng)汽車(chē)和汽油汽車(chē),有相同的可選參數(shù),但有不同的必需參數(shù)。

在這種情況下,可以創(chuàng)建一個(gè)CarBuilder接口,指定構(gòu)建汽車(chē)所需的方法,然后創(chuàng)建兩個(gè)實(shí)現(xiàn)CarBuilder接口的結(jié)構(gòu): ElectricCarBuilderGasolineCarBuilder。

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
}

ElectricCarBuilderGaslineCarBuilder都嵌入了Car結(jié)構(gòu)體并實(shí)現(xiàn)了CarBuilder接口。

然后可以自己實(shí)現(xiàn)制造汽車(chē)所需的方法。

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
}

我們因此可以基于接口創(chuàng)建汽車(chē),也可以使用相同的接口做模擬。

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)
}

在本例中,我們創(chuàng)建了ElectricCarBuilderGasolineCarBuilder,并分別創(chuàng)建了一輛電動(dòng)車(chē)和一輛汽油車(chē)。

CreateCar函數(shù)接受CarBuilder接口,并在最后調(diào)用Build方法創(chuàng)建Car對(duì)象之前,使用構(gòu)建器的方法設(shè)置必需的字段。

以上就是Go構(gòu)建器模式構(gòu)建復(fù)雜對(duì)象方法實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于Go構(gòu)建復(fù)雜對(duì)象的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Linux系統(tǒng)下Go語(yǔ)言開(kāi)發(fā)環(huán)境搭建

    Linux系統(tǒng)下Go語(yǔ)言開(kāi)發(fā)環(huán)境搭建

    這篇文章主要介紹了Linux系統(tǒng)下Go開(kāi)發(fā)環(huán)境搭建,需要的朋友可以參考下
    2022-04-04
  • GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用

    GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用

    fmt包實(shí)現(xiàn)了類(lèi)似C語(yǔ)言printf和scanf的格式化I/O,主要分為向外輸出內(nèi)容和獲取輸入內(nèi)容兩大部分,本文就來(lái)介紹一下GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用,感興趣的可以了解下
    2023-10-10
  • golang中tar壓縮和解壓文件詳情

    golang中tar壓縮和解壓文件詳情

    這篇文章主要給大家介紹golang中tar壓縮和解壓文件,文章以查看官方文檔自帶的給大家演習(xí)一下golang的archive/tar壓縮和解壓功能,需要的朋友可以參考一下
    2021-11-11
  • 淺析Golang開(kāi)發(fā)中g(shù)oroutine的正確使用姿勢(shì)

    淺析Golang開(kāi)發(fā)中g(shù)oroutine的正確使用姿勢(shì)

    很多初級(jí)的Gopher在學(xué)習(xí)了goroutine之后,在項(xiàng)目中其實(shí)使用率不高,所以這篇文章小編主要來(lái)帶大家深入了解一下goroutine的常見(jiàn)使用方法,希望對(duì)大家有所幫助
    2024-03-03
  • Go并發(fā)編程之goroutine使用正確方法

    Go并發(fā)編程之goroutine使用正確方法

    并發(fā)編程有一種常見(jiàn)方式就是許多工作子協(xié)程都是獨(dú)立的,互不干擾,但他們又是“同一時(shí)間”處理。本文重大給大家介紹Go并發(fā)編程goroutine使用方法,一起看看吧
    2021-09-09
  • 使用Golang實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲與分析

    使用Golang實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲與分析

    在網(wǎng)絡(luò)通信中,網(wǎng)絡(luò)數(shù)據(jù)包是信息傳遞的基本單位,抓包是一種監(jiān)控和分析網(wǎng)絡(luò)流量的方法,用于獲取網(wǎng)絡(luò)數(shù)據(jù)包并對(duì)其進(jìn)行分析,本文將介紹如何使用Golang實(shí)現(xiàn)抓包功能,包括網(wǎng)絡(luò)數(shù)據(jù)包捕獲和數(shù)據(jù)包分析,需要的朋友可以參考下
    2023-11-11
  • Go語(yǔ)言學(xué)習(xí)筆記之反射用法詳解

    Go語(yǔ)言學(xué)習(xí)筆記之反射用法詳解

    這篇文章主要介紹了Go語(yǔ)言學(xué)習(xí)筆記之反射用法,詳細(xì)分析了Go語(yǔ)言中反射的概念、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-05-05
  • 一文詳解Golang中的切片數(shù)據(jù)類(lèi)型

    一文詳解Golang中的切片數(shù)據(jù)類(lèi)型

    這篇文章主要介紹了一文詳解Golang中的切片數(shù)據(jù)類(lèi)型,切片是一個(gè)種特殊的數(shù)組。是對(duì)數(shù)組的一個(gè)連續(xù)片段的引用,所以切片是一個(gè)引用類(lèi)型
    2022-09-09
  • golang中為什么Response.Body需要被關(guān)閉詳解

    golang中為什么Response.Body需要被關(guān)閉詳解

    這篇文章主要給大家介紹了關(guān)于golang中為什么Response.Body需要被關(guān)閉的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • 基于Go語(yǔ)言實(shí)現(xiàn)分金幣游戲

    基于Go語(yǔ)言實(shí)現(xiàn)分金幣游戲

    這篇文章主要為大家詳細(xì)介紹了如何利用Go語(yǔ)言實(shí)現(xiàn)分金幣游戲,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論

芦山县| 从化市| 昌宁县| 富裕县| 汝州市| 阜宁县| 沂源县| 巴里| 岳阳县| 大石桥市| 宁津县| 天镇县| 沐川县| 彭水| 岳阳市| 阿鲁科尔沁旗| 呼和浩特市| 新闻| 五莲县| 靖边县| 侯马市| 淮安市| 蕲春县| 湖南省| 阜宁县| 景东| 东光县| 泰顺县| 葫芦岛市| 新乐市| 武乡县| 滦平县| 阳谷县| 囊谦县| 句容市| 喜德县| 达孜县| 淮滨县| 莎车县| 岑溪市| 成武县|