Golang工厂加适配器模式实现对象创建与接口兼容
Go通过接口+结构体+函数值实现工厂与适配器模式:定义Logger接口统一契约,ZapLoggerAdapter和FileWriterAdapter等适配异构日志组件,NewLogger工厂按配置创建对应实例,解耦创建逻辑与具体类型。
Go通过接口+结构体+函数值实现工厂与适配器模式:定义Logger接口统一契约,ZapLoggerAdapter和FileWriterAdapter等适配异构日志组件,NewLogger工厂按配置创建对应实例,解耦创建逻辑与具体类型。

用 Go 实现工厂 + 适配器模式,核心是解耦对象创建逻辑与具体类型,同时让不兼容的接口“变相”符合统一契约。Go 没有类和继承,但靠接口(interface)+ 结构体(struct)+ 函数值,完全可以达成相同设计意图。
定义统一行为接口
先确定对外暴露的抽象能力——比如一个通用的 Logger 接口:
type Logger interface {
Log(msg string)
}
所有日志实现都必须满足这个契约,后续才能被统一使用。
编写不同日志实现(适配目标)
现实里你可能已有第三方日志库(如 zap.Logger)或旧系统模块(如自定义 FileWriter),它们类型不同、方法名不同、参数也不同。这时就需要适配器:
- ZapLoggerAdapter:包装
zap.Logger,把Info()映射为Log() - FileWriterAdapter:把
WriteLine(string)封装成Log(string)
type ZapLoggerAdapter struct {
logger *zap.Logger
}
func (a *ZapLoggerAdapter) Log(msg string) {
a.logger.Info(msg)
}
type FileWriterAdapter struct {
file *os.File
}
func (a *FileWriterAdapter) Log(msg string) {
a.file.WriteString(msg + "\n")
}
用工厂封装创建逻辑
避免调用方感知底层类型差异,提供一个配置驱动的工厂函数:
type LoggerType string
const (
ConsoleLogger LoggerType = "console"
FileLogger LoggerType = "file"
ZapLogger LoggerType = "zap"
)
func NewLogger(t LoggerType, cfg interface{}) (Logger, error) {
switch t {
case ConsoleLogger:
return &ConsoleLoggerImpl{}, nil
case FileLogger:
if path, ok := cfg.(string); ok {
f, err := os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return nil, err
}
return &FileWriterAdapter{file: f}, nil
}
case ZapLogger:
z, err := zap.NewDevelopment()
if err != nil {
return nil, err
}
return &ZapLoggerAdapter{logger: z}, nil
}
return nil, fmt.Errorf("unknown logger type: %s", t)
}
调用时只需传入类型和配置,完全不关心内部结构是否带 zap 或 os.File:
logger, _ := NewLogger(FileLogger, "/tmp/app.log")
logger.Log("service started") // 统一调用
延伸:支持运行时动态适配(可选增强)
如果某些老模块只提供函数而非结构体(比如一个全局 func PrintToDB(string)),也可适配:
type FuncLoggerAdapter struct {
fn func(string)
}
func (a *FuncLoggerAdapter) Log(msg string) {
a.fn(msg)
}
// 工厂中支持:
case "db":
return &FuncLoggerAdapter{fn: PrintToDB}, nil
Go 的函数是一等公民,这种轻量适配非常自然,无需额外 wrapper 类。
不复杂但容易忽略:适配器本身不新增功能,只做“翻译”;工厂不持有实例状态,保持无副作用。两者配合,就能在不改旧代码的前提下,让新系统平滑接入各种异构组件。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















