惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
月光博客
月光博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 聂微东
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
美团技术团队
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
Jina AI
Jina AI
D
Docker
Last Week in AI
Last Week in AI
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - ®Geovin Du Dream Park™

go: Functional Options Pattern go:Timing Functions Pattern python: Timing Functions Pattern go: Steady-State Pattern python: Steady-State Pattern go: Handshaking Pattern python: Handshaking Pattern go: Fail-Fast Pattern python: Fail-Fast Pattern I go: Deadline Pattern python: Deadline Pattern go: Circuit-Breaker Pattern python: Circuit-Breaker Pattern go: Bulkheads Pattern python: Bulkheads Pattern go: Push & Pull Pattern python: Push & Pull Pattern python: Publish/Subscribe Pattern II go: Publish/Subscribe Pattern python: Publish/Subscribe Pattern go: Futures & Promises Pattern python: Futures & Promises Pattern go: Worker Pool Pattern go:Pipeline Pattern python: Worker Pool Pattern python: Pipeline Pattern go: Fan-Out Pattern python: Fan-Out Pattern go: Fan-In Pattern python: Fan-In Pattern Fan-In
go: Strategy Pattern
®Geovin Du Dream Park™ · 2026-04-23 · via 博客园 - ®Geovin Du Dream Park™

项目结构:

image

/*
# 版权所有  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())
	
}

输出:

image

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)