当前位置: 首页 > news >正文

go: Adapter Pattern

 

项目结构:

image

 

结构化优势
分层明确:实体、供应商、适配器、业务完全分离
职责单一:每个文件只做一件事
易扩展:新增供应商 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() stringGetWeight() float64GetMaterial() stringGetCost() float64
}// JewelryEntity 标准数据实体
type JewelryEntity struct {Name     stringWeight   float64Material stringCost     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     stringCarat    float64Material stringPrice    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 adapterimport ("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 valdefault: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 valdefault: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 adapterimport ("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 serviceimport ("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.goadapter/
├── 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 bllimport ("godesginpattern/adapter/adaptee""godesginpattern/adapter/adapter""godesginpattern/adapter/service"
)// 示例
func AdapterMain() {// 对接供应商AsuppA := &adaptee.SupplierA{Data: map[string]interface{}{"名称":  "黄金项链","克重":  5.2,"材质":  "足金","供货价": 2800,},}adapterA := adapter.NewSupplierAAdapter(suppA)service.BusinessProcess(adapterA)// 对接供应商BsuppB := &adaptee.SupplierB{Name:     "Diamond Ring",Carat:    0.5,Material: "Platinum",Price:    12000,}adapterB := adapter.NewSupplierBAdapter(suppB)service.BusinessProcess(adapterB)
} 

输出:

image

 

http://www.jsqmd.com/news/662656/

相关文章:

  • Frenet与Cartesian坐标系互转实战:Python函数库封装与性能优化
  • 3个关键功能,让FanControl成为Windows风扇控制的终极解决方案
  • 2026小程序开发公司推荐哪家?大盘点+避坑大全 - 企业数字化改造和转型
  • 告别抽卡盲盒:3步掌握原神抽卡数据分析的艺术
  • 用STC89C51和HX711AD模块DIY一个厨房电子秤(附完整代码和AD原理图)
  • 开发环境管理系统详细设计文档
  • QuickLookVideo:终极macOS视频预览解决方案,告别Finder无法预览MKV/AVI的烦恼
  • 看盘均线体系
  • 别再死记硬背口诀了!用STM32和串口助手,手把手教你调出完美的PID温度曲线
  • 防串色母片选购要点与热门品牌解析 - 行业分析师666
  • 第七篇 串口(实战篇)- 从AT指令到网络透传:ESP-01S与EC03-DNC的嵌入式开发指南
  • 2026年市面上中空板箱企业,水果周转箱/水果包装盒/中空板箱/钙塑周转箱/中空板周转箱/钙塑箱,中空板箱公司推荐分析 - 品牌推荐师
  • 上篇:没有特征工程,你的模型就是个“睁眼瞎”——这玩意儿到底解决了什么?
  • 2026年韩式婚纱摄影选择攻略:价格、风格与客片质量解析,做得好的婚纱摄影厂商口碑分析技术领航,品质之选 - 品牌推荐师
  • 2026年,我为什么劝你认真考虑UK Biobank数据库?
  • 2026 高压反应釜全维度选购指南:品牌甄选、场景适配与行业发展趋势 - 品牌推荐大师
  • 用Wireshark解密TLS握手:从Client Hello到加密通信的完整追踪
  • LinkSwift:八大网盘直链下载终极指南,免费获取高速下载链接
  • 【智能代码生成避坑指南】:20年资深架构师亲授3大高危冲突场景与实时解决框架
  • 照片拍歪了怎么扶正?2026年3招免费搞定!
  • 云网络架构设计
  • 免费AI图像视频超分辨率终极指南:一键让老旧素材焕发新生
  • Claude Code 实战经验分享(下篇):记忆、规则、权限与快捷操作
  • 用强化学习解决复杂组合优化问题:RL4CO完整指南
  • C++三大隐藏坑:初始化列表、隐式转换、static成员你真的用对了吗?
  • 光伏MPPT中粒子群算法与PO扰动结合的优化方法:加入终止条件与重启功能
  • Janus-Pro-7B多场景落地:食品包装图→营养成分识别+健康建议生成
  • 如何快速掌握LaserGRBL:开源激光雕刻软件的终极入门指南
  • 别再只测RCE了!手把手教你复现Aria2任意文件写入漏洞(附Docker靶场搭建)
  • 华盛锂电冲刺港股:年营收8.7亿,亏256万 沈锦良父子控制58%股权