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

Go設計模式之生成器模式詳細講解

 更新時間:2023年01月11日 16:16:06   作者:Ch3n  
生成器模式將一個復雜對象的構建和它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。生成器模式的主要功能是構建復雜的產(chǎn)品,而且是細化地、分步驟地構建產(chǎn)品,也就是說生成器模式重在一步一步解決構建復雜對象的問題

生成器模式

生成器是一種創(chuàng)建型設計模式, 使你能夠分步驟創(chuàng)建復雜對象。

與其他創(chuàng)建型模式不同, 生成器不要求產(chǎn)品擁有通用接口。 這使得用相同的創(chuàng)建過程生成不同的產(chǎn)品成為可能。

概念示例

當所需產(chǎn)品較為復雜且需要多個步驟才能完成時, 也可以使用生成器模式。 在這種情況下, 使用多個構造方法比僅僅使用一個復雜可怕的構造函數(shù)更簡單。 分為多個步驟進行構建的潛在問題是, 構建不完整的和不穩(wěn)定的產(chǎn)品可能會被暴露給客戶端。 生成器模式能夠在產(chǎn)品完成構建之前使其處于私密狀態(tài)。

在下方的代碼中, 我們可以看到 igloo­Builder冰屋生成器與 nor­mal­Builder普通房屋生成器可建造不同類型房屋, 即 igloo冰屋和 nor­mal­House普通房屋 。 每種房屋類型的建造步驟都是相同的。 主管 (可選) 結構體可對建造過程進行組織。

iBuilder.go: 生成器接口

package main
type IBuilder interface {
    setWindowType()
    setDoorType()
    setNumFloor()
    getHouse() House
}
func getBuilder(builderType string) IBuilder {
    if builderType == "normal" {
        return newNormalBuilder()
    }
    if builderType == "igloo" {
        return newIglooBuilder()
    }
    return nil
}

normalBuilder.go: 具體生成器

package main
type NormalBuilder struct {
    windowType string
    doorType   string
    floor      int
}
func newNormalBuilder() *NormalBuilder {
    return &NormalBuilder{}
}
func (b *NormalBuilder) setWindowType() {
    b.windowType = "Wooden Window"
}
func (b *NormalBuilder) setDoorType() {
    b.doorType = "Wooden Door"
}
func (b *NormalBuilder) setNumFloor() {
    b.floor = 2
}
func (b *NormalBuilder) getHouse() House {
    return House{
        doorType:   b.doorType,
        windowType: b.windowType,
        floor:      b.floor,
    }
}

iglooBuilder.go: 具體生成器

package main
type IglooBuilder struct {
    windowType string
    doorType   string
    floor      int
}
func newIglooBuilder() *IglooBuilder {
    return &IglooBuilder{}
}
func (b *IglooBuilder) setWindowType() {
    b.windowType = "Snow Window"
}
func (b *IglooBuilder) setDoorType() {
    b.doorType = "Snow Door"
}
func (b *IglooBuilder) setNumFloor() {
    b.floor = 1
}
func (b *IglooBuilder) getHouse() House {
    return House{
        doorType:   b.doorType,
        windowType: b.windowType,
        floor:      b.floor,
    }
}

house.go: 產(chǎn)品

package main

type House struct {
    windowType string
    doorType   string
    floor      int
}

director.go: 主管

package main
type Director struct {
    builder IBuilder
}
func newDirector(b IBuilder) *Director {
    return &Director{
        builder: b,
    }
}
func (d *Director) setBuilder(b IBuilder) {
    d.builder = b
}
func (d *Director) buildHouse() House {
    d.builder.setDoorType()
    d.builder.setWindowType()
    d.builder.setNumFloor()
    return d.builder.getHouse()
}

main.go: 客戶端代碼

package main
import "fmt"
func main() {
    normalBuilder := getBuilder("normal")
    iglooBuilder := getBuilder("igloo")
    director := newDirector(normalBuilder)
    normalHouse := director.buildHouse()
    fmt.Printf("Normal House Door Type: %s\n", normalHouse.doorType)
    fmt.Printf("Normal House Window Type: %s\n", normalHouse.windowType)
    fmt.Printf("Normal House Num Floor: %d\n", normalHouse.floor)
    director.setBuilder(iglooBuilder)
    iglooHouse := director.buildHouse()
    fmt.Printf("\nIgloo House Door Type: %s\n", iglooHouse.doorType)
    fmt.Printf("Igloo House Window Type: %s\n", iglooHouse.windowType)
    fmt.Printf("Igloo House Num Floor: %d\n", iglooHouse.floor)
}

output.txt: 執(zhí)行結果

Normal House Door Type: Wooden Door
Normal House Window Type: Wooden Window
Normal House Num Floor: 2

Igloo House Door Type: Snow Door
Igloo House Window Type: Snow Window
Igloo House Num Floor: 1

到此這篇關于Go設計模式之生成器模式詳細講解的文章就介紹到這了,更多相關Go生成器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 利用go語言判斷是否是完全二叉樹

    利用go語言判斷是否是完全二叉樹

    這篇文章主要介紹了利用go語言判斷是否是完全二叉樹,當一個節(jié)點存在右子節(jié)點但是不存在左子節(jié)點這顆樹視為非完全二叉樹,通過利用GO語言判斷來判斷出否是完全二叉樹,詳細內(nèi)容參考如下
    2022-05-05
  • Go語言?Channel通道詳解

    Go語言?Channel通道詳解

    Channel是一個通道,可以通過它讀取和寫入數(shù)據(jù),它就像水管一樣,網(wǎng)絡數(shù)據(jù)通過Channel 讀取和寫入,這篇文章主要給大家介紹了關于Go語言?Channel通道的相關資料,需要的朋友可以參考下
    2023-07-07
  • Go語言常用字符串處理方法實例匯總

    Go語言常用字符串處理方法實例匯總

    這篇文章主要介紹了Go語言常用字符串處理方法,實例匯總了Go語言中常見的各種字符串處理技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Golang協(xié)程池gopool設計與實現(xiàn)

    Golang協(xié)程池gopool設計與實現(xiàn)

    本文主要介紹了Golang協(xié)程池gopool設計與實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • Golang中for循環(huán)的用法示例詳解

    Golang中for循環(huán)的用法示例詳解

    for循環(huán)就是讓一段代碼循環(huán)的執(zhí)行,接下來通過本文給大家講解Golang中for循環(huán)的用法,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 淺析Go語言中的緩沖區(qū)及其在fmt包中的應用

    淺析Go語言中的緩沖區(qū)及其在fmt包中的應用

    這篇文章主要為大家詳細介紹了Go語言中的緩沖區(qū)及其在fmt包中的應用的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2024-01-01
  • go語言更高精度的Sleep實例解析

    go語言更高精度的Sleep實例解析

    這篇文章主要為大家介紹了go語言更高精度的Sleep實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 詳解Go語言中的監(jiān)視器模式與配置熱更新

    詳解Go語言中的監(jiān)視器模式與配置熱更新

    這篇文章主要為大家詳細介紹了Go語言中的監(jiān)視器模式與配置熱更新的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • Linux環(huán)境下編譯并運行go項目的全過程

    Linux環(huán)境下編譯并運行go項目的全過程

    Go語言是Google的開源編程語言,廣泛應用于云計算、分布式系統(tǒng)開發(fā)等領域,在Linux上也有大量的應用場景,這篇文章主要給大家介紹了關于Linux環(huán)境下編譯并運行go項目的相關資料,需要的朋友可以參考下
    2023-11-11
  • 一文幫你搞懂Go面試中常問的channel問題

    一文幫你搞懂Go面試中常問的channel問題

    channel是Golang面試時經(jīng)常會問到的問題,所以這篇文章為大家整理了channel??嫉囊恍﹩栴}以及回答,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-06-06

最新評論

沁阳市| 开远市| 蒙自县| 达尔| 永清县| 惠水县| 浦江县| 西乌珠穆沁旗| 饶阳县| 家居| 砚山县| 长春市| 勐海县| 昆山市| 普安县| 香港| 尚志市| 吉木乃县| 于田县| 通城县| 石阡县| 泾源县| 邵东县| 雅安市| 班玛县| 凤城市| 龙岩市| 枝江市| 始兴县| 高陵县| 社会| 周宁县| 利津县| 临夏市| 彭阳县| 揭西县| 阳山县| 偃师市| 广州市| 桂东县| 梧州市|