简单工厂模式

package factory

type UserCreateFunc func(id int, name string) interface{}

type User struct {
	ID   int
	Name string
}

func NewUser() UserCreateFunc {
	return func(id int, name string) interface{} {
		return &User{ID: id, Name: name}
	}
}

type AdminUser struct {
	ID   int
	Name string
	Role string
}

func NewAdminUser() UserCreateFunc {
	return func(id int, name string) interface{} {
		return &AdminUser{ID: id, Name: name,Role: "admin"}
	}
}
package factory

import (
	"fmt"
	"testing"
)

const (
	FrontUserType = iota
	AdminUserType
)
type UserType int

func CreateUser(t UserType) UserCreateFunc{
	switch t {
	case FrontUserType:
		return NewUser()
	case AdminUserType:
		return NewAdminUser()
	default:
		return NewUser()
	}
}

func TestFactoryNew(t *testing.T){
	user := CreateUser(FrontUserType)(123,"abc").(*User)
	fmt.Println(user)
	admin := CreateUser(AdminUserType)(124,"admin").(*AdminUser)
	fmt.Println(admin)
}

最后更新于