美文网首页
go语言工厂模式

go语言工厂模式

作者: HaigLee | 来源:发表于2019-12-30 00:31 被阅读0次

作者:HaigLee
https://www.jianshu.com/u/67ec21fb270d
本文由 HaigLee 发布。未经许可,禁止转载。

1. 说明

Golang 的结构体没有构造函数,通常可以使用工厂模式来解决这个问题。

2. 需求示例

一个结构体的声明:

package model
type Student  struct{
    Name string ...
}

因为这里的Student 的首字母S是大写的,如果我们想在其它包括创建Student 的实例(比如main包),引入model 包后,就可以直接创建Student 结构体的变量(实例)。但是问题来了,如果首字母是小写的,比如是:

type student struct{
    ...
}

那么直接使用就不行了,这时候该怎么办呢?
使用工厂模式来解决!

3. 工厂模式解决的问题

  • 使用工厂模式实现挎包创建结构体实例(变量)的案例:
    1)如果model 包的结构体变量首字母大写,引入后,直接使用,没有问题;
    例如:
    model包代码:
package model

// 定义一个结构体
type Student struct{
    Name string
    Score float64
}

main包代码:

package main
import (
    "fmt"
    "xxx/xx..xx/xxx/model" // src 下目录名称
)

func main(){
    var str = model.Student{
        Name : "tom",
        Score: "66.6",
    }
    fmt.Println(stu)
}
  1. 如果model 包的结构体变量首字母小写,引入后,不能直接使用,可以使用工厂模式解决:

model包代码:

package model

// 定义一个结构体
type Student struct{
    Name string
    Score float64
}

// 因为student 结构体首字母是小写,因此是只能在model 使用
// 我们通过工厂模式来解决
func NewStudent(n string, s float64)  *student{
    return &student{
        Name : n,
        Score : s,
    }
}

main包代码:

package main
import (
    "fmt"
    "xxx/xx..xx/xxx/model" // src 下目录名称
)

func main(){
   var stu = model.NewStudent("tom~", 88.8) // 返回的也是指针
    fmt.Println(stu)// &(.......)
    fmt.Println(*stu)//  返回值
    fmt.Println(stu.Score)// 这个编译器可以做(*stu) 默认处理。
}
  1. 如果结构体中score 字段首字母小写,那么,在其他包不可以直接使用该字段,我们可以通过提供一个方法来解决。

model包代码:

package model

// 定义一个结构体
type Student struct{
    Name string
    score float64
}

// 因为student 结构体首字母是小写,因此是只能在model 使用
// 我们通过工厂模式来解决
func NewStudent(n string, s float64)  *student{
    return &student{
        Name : n,
        score : s,
    }
}

//获取score 方法
func (s *student) GetScore() float64{
    // return (*s).score 
    return s.score
}

main包代码:

package main
import (
    "fmt"
    "xxx/xx..xx/xxx/model" // src 下目录名称
)

func main(){
   var stu = model.NewStudent("tom~", 88.8) // 返回的也是指针
    fmt.Println(stu)// &(.......)
    fmt.Println(*stu)//  返回值
    fmt.Println(stu.GetScore())// 这个编译器可以做(*stu) 默认处理。
}

作者:HaigLee
https://www.jianshu.com/u/67ec21fb270d
本文由 HaigLee 发布。未经许可,禁止转载。

相关文章

  • Go语言设计模式(2)工厂模式

    Go语言设计模式(2)工厂模式 工厂模式的定义 工厂模式的定义如下: Define an interface fo...

  • Go语言设计模式(3)抽象工厂模式

    Go语言设计模式(3)抽象工厂模式 抽象工厂模式的定义 抽象工厂模式的定义如下: Provide an inter...

  • go闭包和工厂模式

    先说工厂模式,工厂模式有3种:简单工厂模式;工厂方法模式;抽象工厂模式。 go语言中的闭包已经在上一节golang...

  • go语言工厂模式

    作者:HaigLeehttps://www.jianshu.com/u/67ec21fb270d本文由 HaigL...

  • go语言的工厂模式

    有一工程如下: model包中的student.go源码: student.go声明了一个Student的结构体,...

  • 设计模式——简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactoryMethod)模式,但不属于23种GO...

  • Golang设计模式(工厂方法模式)

    工厂方法模式类图, abstract_factory_test.go car_factory.go motorbi...

  • iOS开发之设计模式 - 工厂模式

    由《大话设计模式 - 工厂模式》的OC和部分Swift的语言转义 工厂模式 继上一篇《代理模式》 工厂模式, 定义...

  • go的工厂模式

    说明 go的结构体没有构造函数,通常是用工厂模式来解决这个问题 使用工厂模式来解决跨包引的私有结构体的问题目录结构...

  • go实现工厂模式

    面试常见题目,有时候可能让你手写一些,所以尽量做到快速手写实现。这个看起来很简单,也可能需要经常练习一下。

网友评论

      本文标题:go语言工厂模式

      本文链接:https://www.haomeiwen.com/subject/knluoctx.html