Go 依赖注入设计模式
package main
import (
"fmt"
)
// 依赖接口
type Dependency interface {
Describe() string
}
// 实现Dependency接口的具体依赖
type ConcreteDependency struct{}
// 实现Describe方法
func (cd *ConcreteDependency) Describe() string {
return "This is a concrete dependency."
}
// 容器结构体
type Container struct {
dependencies map[string]Dependency
}
// 向容器中注册依赖
func (c *Container) Register(key string, dependency Dependency) {
if c.dependencies == nil {
c.dependencies = make(map[string]Dependency)
}
c.dependencies[key] = dependency
}
// 解析依赖
func (c *Container) Resolve(key string) (Dependency, bool) {
dependency, found := c.dependencies[key]
return dependency, found
}
func main() {
// 创建容器并注册依赖
container := &Container{}
container.Register("concreteDependency", &ConcreteDependency{})
// 解析依赖
dependency, found := container.Resolve("concreteDependency")
if found {
fmt.Println(dependency.Describe())
}
}
这段代码展示了如何在Go中实现一个简单的依赖注入容器。首先定义了一个Dependency
接口和一个具体的依赖实现ConcreteDependency
。然后创建了一个Container
结构体来管理依赖的注册和解析。最后在main
函数中,我们创建了容器,注册了一个依赖,并成功解析出来,调用了Describe
方法。这是一个典型的依赖注入的例子,对于学习Go语言的设计模式有很好的教育意义。
评论已关闭