项目结构:

Go
/*
# 版权所有 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("------------------------------------------------------------------------------------------")
}
Go
/*
# 版权所有 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
}
Go
/*
# 版权所有 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
}
Go
/*
# 版权所有 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)
}
调用:
Go
/*
# 版权所有 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())
}
输出:
