
项目结构:

结构化优势 分层明确:实体、供应商、适配器、业务完全分离 职责单一:每个文件只做一件事 易扩展:新增供应商 C,只需增加: adaptee/supplier_c.go adapter/supplier_c_adapter.go 业务零改动:service/business.go 永远不需要修改 符合设计模式最佳实践
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter Pattern 适配器模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 20:55
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : jewelry.go
*/
package entity
// StandardJewelry 业务系统统一标准接口
type StandardJewelry interface {
GetName() string
GetWeight() float64
GetMaterial() string
GetCost() float64
}
// JewelryEntity 标准数据实体
type JewelryEntity struct {
Name string
Weight float64
Material string
Cost float64
}
func (j *JewelryEntity) GetName() string { return j.Name }
func (j *JewelryEntity) GetWeight() float64 { return j.Weight }
func (j *JewelryEntity) GetMaterial() string { return j.Material }
func (j *JewelryEntity) GetCost() float64 { return j.Cost }/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter Pattern 适配器模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 20:56
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : supplier_a.go
*/
package adaptee
// SupplierA 传统中文Map格式
type SupplierA struct {
Data map[string]interface{}
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter Pattern 适配器模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 20:56
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : supplier_b.go
*/
package adaptee
// SupplierB 国际英文结构体
type SupplierB struct {
Name string
Carat float64
Material string
Price float64
}/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter Pattern 适配器模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 20:56
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : supplier_a_adapter.go
*/
package adapter
import (
"godesginpattern/adapter/adaptee"
"godesginpattern/adapter/entity"
)
// SupplierAAdapter 适配A → 标准接口
type SupplierAAdapter struct {
supplier *adaptee.SupplierA
}
func NewSupplierAAdapter(s *adaptee.SupplierA) entity.StandardJewelry {
return &SupplierAAdapter{supplier: s}
}
func (a *SupplierAAdapter) GetName() string {
return a.supplier.Data["名称"].(string)
}
// 克重 → 统一转 float64(支持 int / float64)
func (a *SupplierAAdapter) GetWeight() float64 {
switch val := a.supplier.Data["克重"].(type) {
case int:
return float64(val)
case float64:
return val
default:
return 0
}
}
func (a *SupplierAAdapter) GetMaterial() string {
return a.supplier.Data["材质"].(string)
}
// 供货价 → 统一转 float64(支持 int / float64)
// 这里修复了 panic 问题!
func (a *SupplierAAdapter) GetCost() float64 {
switch val := a.supplier.Data["供货价"].(type) {
case int:
return float64(val)
case float64:
return val
default:
return 0
}
}
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter Pattern 适配器模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 20:57
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : supplier_b_adapter.go
*/
package adapter
import (
"godesginpattern/adapter/adaptee"
"godesginpattern/adapter/entity"
)
// SupplierBAdapter 适配B → 标准接口
type SupplierBAdapter struct {
supplier *adaptee.SupplierB
}
func NewSupplierBAdapter(s *adaptee.SupplierB) entity.StandardJewelry {
return &SupplierBAdapter{supplier: s}
}
func (b *SupplierBAdapter) GetName() string { return b.supplier.Name }
func (b *SupplierBAdapter) GetWeight() float64 { return b.supplier.Carat }
func (b *SupplierBAdapter) GetMaterial() string { return b.supplier.Material }
func (b *SupplierBAdapter) GetCost() float64 { return b.supplier.Price }/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter Pattern 适配器模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 20:57
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : business.go
*/
package service
import (
"fmt"
"godesginpattern/adapter/entity"
)
// BusinessProcess 统一业务流程
func BusinessProcess(j entity.StandardJewelry) {
fmt.Println("=== 执行业务流程 ===")
fmt.Printf("商品:%s\n", j.GetName())
fmt.Printf("重量:%.2f\n", j.GetWeight())
fmt.Printf("材质:%s\n", j.GetMaterial())
fmt.Printf("成本:%.2f\n", j.GetCost())
fmt.Println("入库、计价、下单完成 ✅\n")
}调用:
/*
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Adapter Pattern 适配器模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : goLang 2024.3.6 go 26.2
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/4/18 21:02
# User : geovindu
# Product : GoLand
# Project : godesginpattern
# File : adapterbll.go
adapter/
├── go.mod // Go 模块
├── entity/ // 统一标准实体层
│ └── jewelry.go // 标准接口 + 标准实体
├── adaptee/ // 被适配者(供应商原始接口)
│ ├── supplier_a.go // 供应商A(中文Map)
│ └── supplier_b.go // 供应商B(英文结构体)
├── adapter/ // 适配器层(核心转换)
│ ├── supplier_a_adapter.go
│ └── supplier_b_adapter.go
├── service/ // 业务逻辑层
│ └── business.go
└── main.go // 程序入口
*/
package bll
import (
"godesginpattern/adapter/adaptee"
"godesginpattern/adapter/adapter"
"godesginpattern/adapter/service"
)
// 示例
func AdapterMain() {
// 对接供应商A
suppA := &adaptee.SupplierA{
Data: map[string]interface{}{
"名称": "黄金项链",
"克重": 5.2,
"材质": "足金",
"供货价": 2800,
},
}
adapterA := adapter.NewSupplierAAdapter(suppA)
service.BusinessProcess(adapterA)
// 对接供应商B
suppB := &adaptee.SupplierB{
Name: "Diamond Ring",
Carat: 0.5,
Material: "Platinum",
Price: 12000,
}
adapterB := adapter.NewSupplierBAdapter(suppB)
service.BusinessProcess(adapterB)
} 输出:
