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中创造实例对象即可