awesome-patterns/creational/factory_method.go

34 lines
560 B
Go
Raw Normal View History

2019-10-30 22:05:23 +03:00
package data
import "io"
type Store interface {
Open(string) (io.ReadWriteCloser, error)
}
type StorageType int
const (
DiskStorage StorageType = 1 << iota
TempStorage
MemoryStorage
)
func NewStore(t StorageType) Store {
switch t {
case MemoryStorage:
return newMemoryStorage( /*...*/ )
case DiskStorage:
return newDiskStorage( /*...*/ )
default:
return newTempStorage( /*...*/ )
}
}
s, _ := NewStore(data.MemoryStorage)
f, _ := s.Open("file")
n, _ := f.Write([]byte("data"))
defer f.Close()