mirror of
https://github.com/crazybber/go-pattern-examples.git
synced 2024-11-25 21:26:03 +03:00
43 lines
777 B
Go
43 lines
777 B
Go
package simplefactory
|
||
|
||
import "fmt"
|
||
|
||
type schoolmember int
|
||
|
||
const (
|
||
student schoolmember = iota
|
||
teacher
|
||
)
|
||
|
||
//Mouth is interface that people can Say words
|
||
type Mouth interface {
|
||
Say(name string) string
|
||
}
|
||
|
||
//New return instance object that have `Mouth` and can speak
|
||
func New(t schoolmember) Mouth {
|
||
switch t {
|
||
case student:
|
||
return &studentType{}
|
||
case teacher:
|
||
return &teacherType{}
|
||
}
|
||
return nil
|
||
}
|
||
|
||
//teacherType is one of Mouth implement
|
||
type teacherType struct{}
|
||
|
||
//Say teacher's name
|
||
func (*teacherType) Say(name string) string {
|
||
return fmt.Sprintf("I am Teacher: %s", name)
|
||
}
|
||
|
||
//studentType is another Mouth implement
|
||
type studentType struct{}
|
||
|
||
//Say student's name
|
||
func (*studentType) Say(name string) string {
|
||
return fmt.Sprintf("I am Student: %s", name)
|
||
}
|