项目结构/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Strategy 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/23 22:08 # User : geovindu # Product : GoLand # Project : godesginpattern # File : jewelry.go */ package entity import fmt // Jewelry 珠宝实体不依赖任何包 type Jewelry struct { Material string Weight float64 CraftLevel int Brand string } func NewJewelry(material string, weight float64, craftLevel int, brand string) *Jewelry { return Jewelry{ Material: material, Weight: weight, CraftLevel: craftLevel, Brand: brand, } } // 新增显示完整珠宝信息 func (j *Jewelry) ShowJewelryInfo() { fmt.Println(————————【珠宝基础信息】————————) fmt.Println(材质 : , j.Material) fmt.Println(重量 : , j.Weight, 克) fmt.Println(工艺等级: , j.CraftLevel) fmt.Println(品牌 : , j.Brand) fmt.Println(——————————————————————————————) }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Strategy 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/23 22:09 # User : geovindu # Product : GoLand # Project : godesginpattern # File : pricing.go */ package strategy import godesginpattern/strategy/domain/entity // PricingStrategy 定价策略顶层接口 // 职责定义统一契约所有策略必须实现 type PricingStrategy interface { Calculate(j *entity.Jewelry) float64 }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Strategy 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/23 22:09 # User : geovindu # Product : GoLand # Project : godesginpattern # File : brand.go */ package strategy import godesginpattern/strategy/domain/entity // BrandPremiumPricing 品牌溢价定价策略 type BrandPricing struct{} func (b *BrandPricing) Calculate(j *entity.Jewelry) float64 { base : j.Weight * 100 switch j.Brand { case 高端品牌: return base * 3 default: return base } } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Strategy 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/23 22:09 # User : geovindu # Product : GoLand # Project : godesginpattern # File : craft.go */ package strategy import godesginpattern/strategy/domain/entity // CraftPricing 按工艺定价策略 type CraftPricing struct{} func (c *CraftPricing) Calculate(j *entity.Jewelry) float64 { return 1000 float64(j.CraftLevel)*500 } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Strategy 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/23 22:09 # User : geovindu # Product : GoLand # Project : godesginpattern # File : weight.go */ package strategy import godesginpattern/strategy/domain/entity // WeightPricing 按重量定价策略 // 职责仅实现重量计价算法无任何其他逻辑 type WeightPricing struct{} func (w *WeightPricing) Calculate(j *entity.Jewelry) float64 { var unitPrice float64 switch j.Material { case 黄金: unitPrice 500 case 白银: unitPrice 10 default: unitPrice 50 } return unitPrice * j.Weight }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Strategy 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/23 22:20 # User : geovindu # Product : GoLand # Project : godesginpattern # File : jewelry_context.go */ package context import ( godesginpattern/strategy/domain/entity godesginpattern/strategy/domain/strategy ) // JewelryContext 上下文持有实体 策略 // 这是策略模式标准 Context type JewelryContext struct { jewelry *entity.Jewelry strategy strategy.PricingStrategy } func NewJewelryContext(j *entity.Jewelry) *JewelryContext { return JewelryContext{jewelry: j} } // SetStrategy 设置策略 func (c *JewelryContext) SetStrategy(s strategy.PricingStrategy) { c.strategy s } // CalculatePrice 计算价格 func (c *JewelryContext) CalculatePrice() float64 { return c.strategy.Calculate(c.jewelry) }调用/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Strategy 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/23 22:22 # User : geovindu # Product : GoLand # Project : godesginpattern # File : strategybll.go */ package bll import ( fmt godesginpattern/strategy/context godesginpattern/strategy/domain/entity godesginpattern/strategy/strategy ) func StrategyMain() { // 创建珠宝 j : entity.NewJewelry(黄金, 10, 4, 高端品牌) j.ShowJewelryInfo() // 创建上下文 ctx : context.NewJewelryContext(j) // 重量策略 ctx.SetStrategy(strategy.WeightPricing{}) fmt.Printf(重量计价%.2f\n, ctx.CalculatePrice()) // 工艺策略 ctx.SetStrategy(strategy.CraftPricing{}) fmt.Printf(工艺计价%.2f\n, ctx.CalculatePrice()) // 品牌策略 ctx.SetStrategy(strategy.BrandPricing{}) fmt.Printf(品牌计价%.2f\n, ctx.CalculatePrice()) j entity.NewJewelry(蓝宝石, 20, 5, 高端品牌) j.ShowJewelryInfo() // 创建上下文 ctx context.NewJewelryContext(j) // 重量策略 ctx.SetStrategy(strategy.WeightPricing{}) fmt.Printf(重量计价%.2f\n, ctx.CalculatePrice()) // 工艺策略 ctx.SetStrategy(strategy.CraftPricing{}) fmt.Printf(工艺计价%.2f\n, ctx.CalculatePrice()) // 品牌策略 ctx.SetStrategy(strategy.BrandPricing{}) fmt.Printf(品牌计价%.2f\n, ctx.CalculatePrice()) }输出