Golang中的工厂模式

工厂模式简介

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

结构体是没有构造函数的

一个结构体的声明是这样的:

package model
type Student struct {
    Name string
    //Other codes
}
//如果Student首字母小写,这样在main包中就调用不了了

当结构体定义的时候名称是小写,但是需要在其它包声明该结构体,这个时候就要用工厂模式

工厂模式案例

我的文件目录是这样的


不用工厂模式,正常写的话代码如下:

main文件夹中的main.go

package main

import (
    "fmt"

    "../model"
)

func main() {
    var stu = model.Student{
        Name: "Zideng Feng",
        Age:  22,
    }
    fmt.Println(stu)
}

model文件夹中的student.go

package model

type Student struct {
    Name string
    Age  int
}

运行main.go后,输出的结果是

{Zideng Feng 22}

但是如果Student这个结构体被封装过了,小写了首字母,也就是student,就不能直接调用了,因此我们用下面这种方式:

student.go的代码

package model

type student struct {
    Name string
    Age  int
}

func NewStudent(name string, age int) *student {
    return &student{
        Name: name,
        Age:  age,
    }
}

main.go的代码

package main

import (
    "fmt"

    "../model"
)

func main() {
    // var stu = model.Student{
    //  Name: "Zideng Feng",
    //  Age:  22,
    // }
    // fmt.Println(stu)
    var stu = model.NewStudent("Zideng Feng", 22)
    fmt.Println(stu)
    fmt.Println(*stu)
}

输出的结果是

&{Zideng Feng 22}
{Zideng Feng 22}

在如果在main中不好创造实例对象,在student.go中创造实例对象即可