• Go实现常用软件设计模式三:生成器模式


    目录:

    1. 举个栗子
    2. 概念介绍
    3. 使用场景

    1.举个栗子

    2.概念介绍

    使用一个中间件来帮助我们填充创建对象参数

    优点:

     将创建逻辑集中在一起

    复用了不同参数创建逻辑

    缺点:

    新增生成器类

    3.使用场景

    main.go

    ```

    package main

    import (
    "dbTest/DesignerModel/builder/elephant"
    "fmt"
    )

    func main(){
    elephant := elephant.NewBuilder().SetName("lily").SetGender("female").Build()
    fmt.Println(elephant.GetName())
    }

    ```

    elephant.go

    ```

    package elephant

    /*
    建造者模式
    */

    type Elephant struct {
    name string
    gender string
    legs int
    height float64
    weight float64
    toothLength float64
    noseLength float64
    }

    // 关键点1: 为elephant定义一个Builder对象

    type Builder struct {
    // 关键点2: 将Elephant作为Builder的成员属性
    elephant *Elephant
    }

    // 关键点3: 定义构建Builder的方法

    func (s *Builder) SetName(name string) *Builder {
    s.elephant.name = name
    // 关键点4: 返回Builder接收者指针,支持链式调用
    return s
    }

    func (s *Builder) SetGender(gender string) *Builder {
    s.elephant.gender = gender
    return s
    }


    // 关键点5: 定义Build方法,在链式调用的最后调用,返回构建好的Elephant

    func (s *Builder) Build() *Elephant {
    return s.elephant
    }

    // 关键点6: 定义一个实例化Builder对象的工厂方法

    func NewBuilder() *Builder {
    return &Builder{elephant: &Elephant{}}
    }


    func (e Elephant) GetName() string {
    return e.name
    }

    ```

  • 相关阅读:
    go语言学习十七
    go语言学习十六
    go语言学习十五
    go语言学习十四
    go语言学习十三
    go语言学习十二
    go语言学习十一
    go 语言学习十
    go 语言学习九
    go 语言学习八
  • 原文地址:https://www.cnblogs.com/gongxianjin/p/16443829.html
Copyright © 2020-2023  润新知