package stone import "image" import "errors" type Backend interface { Run () (channel chan(Event)) SetTitle (title string) SetIcon (icons []image.Image) } type BackendFactory func (application *Application) (backend Backend, err error) var factories []BackendFactory func RegisterBackend (factory BackendFactory) { factories = append(factories, factory) } func instantiateBackend (application *Application) (backend Backend, err error) { // find a suitable backend for _, factory := range factories { backend, err = factory(application) if err == nil && backend != nil { return } } // if none were found, but there was no error produced, produce an // error if err == nil { err = errors.New("no available backends") } return }