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

推荐订阅源

腾讯CDC
GbyAI
GbyAI
C
CERT Recently Published Vulnerability Notes
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
S
Securelist
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
Latest news
Latest news
T
Tor Project blog
T
Threat Research - Cisco Blogs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Spread Privacy
Spread Privacy
K
Kaspersky official blog
T
The Exploit Database - CXSecurity.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V2EX - 技术
V2EX - 技术
L
Lohrmann on Cybersecurity
Google Online Security Blog
Google Online Security Blog
Cyberwarzone
Cyberwarzone
Help Net Security
Help Net Security
The Last Watchdog
The Last Watchdog
C
Cybersecurity and Infrastructure Security Agency CISA
Attack and Defense Labs
Attack and Defense Labs
大猫的无限游戏
大猫的无限游戏
Schneier on Security
Schneier on Security
H
Heimdal Security Blog
O
OpenAI News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
AI
AI
H
Hacker News: Front Page
博客园_首页
博客园 - 【当耐特】
L
LINUX DO - 最新话题
MyScale Blog
MyScale Blog
量子位
Vercel News
Vercel News
C
Cisco Blogs
L
LINUX DO - 热门话题
Y
Y Combinator Blog
T
Threatpost
爱范儿
爱范儿
P
Privacy & Cybersecurity Law 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: Producer Consumer  Pattern python: Producer Consumer Pattern go: Parallelism Pattern python: Parallelism Pattern go: Reactor Pattern python: Reactor Pattern go: Generators Pattern python: speech to text offline python: Generators Pattern go: Coroutines Pattern python:Coroutines Pattern go: Broadcast Pattern python: Broadcast Pattern python: Bounded Parallelism Pattern go: Bounded Parallelism Pattern python: N-Barrier Pattern go: N-Barrier Pattern python: Semaphore Pattern go: Semaphore Pattern python: Read-Write Lock Pattern go: Read-Write Lock Pattern python: Monitor Pattern go: Monitor Pattern python: Mutex Pattern go: Lock/Mutex Pattern Python: Condition Variable Pattern go:Condition Variable Pattern python: Registry Pattern python: Interpreter Pattern go: Interpreter Pattern go: Registry Pattern go: Memento Pattern go: State Pattern go:Template Method Pattern go: Strategy Pattern go: Visitor Pattern go: Observer Pattern go: Mediator Pattern go: Iterator Pattern go: Chain of Responsibility Pattern go: Proxy Pattern go:Decorator Pattern go: Facade Pattern go: Flyweight Pattern go: Composite Pattern go: Singleton Pattern go: Prototype Pattern go: Bridge Pattern go: Adapter Pattern go: Builder Pattern 密码进行加盐哈希 using CSharp,Python,Go,Java go: Abstract Factory Pattern go: Model,Interface,DAL ,Factory,BLL using mysql go: Simple Factory Pattern go: Factory Method Pattern go: goLang 在Windows环境搭建Go语言开发环境 CSharp: Parallel Extensions cpp: class python: 蝴蝶跟随鼠标 javascript: 中国历史人物热力分布图using echart javascript: 中国历史人物热力图 python: 初养龙虾微信纯文字自动回复using workBuddy python: object 入门 python: Factory Method Pattern python: Simple Factory Pattern python: Abstract Factory Pattern 区域化 代码 python: Null Object Pattern python: Builder Pattern python: Adapter Pattern
go: Command Pattern
®Geovin Du Dream Park™ · 2026-04-26 · via 博客园 - ®Geovin Du Dream Park™

项目结构:

image

/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Command 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/26 12:55
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : jeweler.go
*/
package receiver

import "fmt"

// Jeweler 珠宝工匠(接收者):职责单一,只实现首饰加工逻辑
type Jeweler struct {
	name string
}

func NewJeweler(name string) *Jeweler {
	return &Jeweler{name: name}
}

// ========== 具体业务操作 ==========
func (j *Jeweler) PolishRing() error {
	fmt.Printf("[%s] 执行:戒指抛光完成 ✨\n", j.name)
	return nil
}

func (j *Jeweler) InlayDiamond() error {
	fmt.Printf("[%s] 执行:钻石镶嵌完成 💎\n", j.name)
	return nil
}

func (j *Jeweler) CleanNecklace() error {
	fmt.Printf("[%s] 执行:项链清洗完成 🧼\n", j.name)
	return nil
}

// ========== 撤销操作 ==========
func (j *Jeweler) UndoPolishRing() error {
	fmt.Printf("[%s] 撤销:戒指抛光已回滚 ❌\n", j.name)
	return nil
}

func (j *Jeweler) UndoInlayDiamond() error {
	fmt.Printf("[%s] 撤销:钻石镶嵌已回滚 ❌\n", j.name)
	return nil
}

func (j *Jeweler) UndoCleanNecklace() error {
	fmt.Printf("[%s] 撤销:项链清洗已回滚 ❌\n", j.name)
	return nil
}
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Command 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/26 12:55
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : workbench.go
*/
package invoker

import (
	"errors"
	"godesginpattern/command/command"
)

// Workbench 工作台(调用者):职责单一,仅负责执行/撤销/记录命令
type Workbench struct {
	commandHistory []command.Command // 命令历史(可扩展存入DB)
}

func NewWorkbench() *Workbench {
	return &Workbench{
		commandHistory: make([]command.Command, 0),
	}
}

// ExecuteCommand 执行命令
func (w *Workbench) ExecuteCommand(cmd command.Command) error {
	if cmd == nil {
		return errors.New("命令不能为空")
	}

	// 执行命令
	if err := cmd.Execute(); err != nil {
		return err
	}

	// 记录历史
	w.commandHistory = append(w.commandHistory, cmd)
	return nil
}

// UndoLastCommand 撤销上一个命令
func (w *Workbench) UndoLastCommand() error {
	if len(w.commandHistory) == 0 {
		return errors.New("无操作可撤销")
	}

	// 取出最后一条命令
	lastIdx := len(w.commandHistory) - 1
	lastCmd := w.commandHistory[lastIdx]

	// 撤销
	if err := lastCmd.Undo(); err != nil {
		return err
	}

	// 移除历史
	w.commandHistory = w.commandHistory[:lastIdx]
	return nil
}

// GetHistory 获取命令历史(用于日志、审计)
func (w *Workbench) GetHistory() []command.Command {
	return w.commandHistory
}
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Command 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/26 12:56
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : clean.go
*/
package command

import "godesginpattern/command/receiver"

type CleanNecklaceCommand struct {
	jeweler *receiver.Jeweler
}

func NewCleanNecklaceCommand(j *receiver.Jeweler) *CleanNecklaceCommand {
	return &CleanNecklaceCommand{jeweler: j}
}

func (c *CleanNecklaceCommand) Execute() error {
	return c.jeweler.CleanNecklace()
}

func (c *CleanNecklaceCommand) Undo() error {
	return c.jeweler.UndoCleanNecklace()
}

func (c *CleanNecklaceCommand) Name() string {
	return "CleanNecklaceCommand"
}


/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Command 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/26 12:56
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : command.go
*/
package command

// Command 命令接口(抽象层):企业级必须定义标准契约
type Command interface {
	Execute() error
	Undo() error
	Name() string // 用于日志、追踪、可观测性
}


/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Command 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/26 12:56
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : inlay.go
*/
package command

import "godesginpattern/command/receiver"

type InlayDiamondCommand struct {
	jeweler *receiver.Jeweler
}

func NewInlayDiamondCommand(j *receiver.Jeweler) *InlayDiamondCommand {
	return &InlayDiamondCommand{jeweler: j}
}

func (i *InlayDiamondCommand) Execute() error {
	return i.jeweler.InlayDiamond()
}

func (i *InlayDiamondCommand) Undo() error {
	return i.jeweler.UndoInlayDiamond()
}

func (i *InlayDiamondCommand) Name() string {
	return "InlayDiamondCommand"
}


/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Command 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/26 12:56
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : polish.go
*/
package command

import "godesginpattern/command/receiver"

// PolishRingCommand 抛光戒指命令
type PolishRingCommand struct {
	jeweler *receiver.Jeweler
}

func NewPolishRingCommand(j *receiver.Jeweler) *PolishRingCommand {
	return &PolishRingCommand{jeweler: j}
}

func (p *PolishRingCommand) Execute() error {
	return p.jeweler.PolishRing()
}

func (p *PolishRingCommand) Undo() error {
	return p.jeweler.UndoPolishRing()
}

func (p *PolishRingCommand) Name() string {
	return "PolishRingCommand"
}
/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Command 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/26 12:57
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : jewelry_service.go
*/
package service

import (
	"fmt"
	"godesginpattern/command/command"
	"godesginpattern/command/invoker"
)

// JewelryService 业务服务:职责单一,编排业务流程
type JewelryService struct {
	workbench *invoker.Workbench
	polishCmd command.Command
	inlayCmd  command.Command
	cleanCmd  command.Command
}

func NewJewelryService(
	workbench *invoker.Workbench,
	polishCmd command.Command,
	inlayCmd command.Command,
	cleanCmd command.Command,
) *JewelryService {
	return &JewelryService{
		workbench: workbench,
		polishCmd: polishCmd,
		inlayCmd:  inlayCmd,
		cleanCmd:  cleanCmd,
	}
}

// RunBusinessFlow 执行完整业务流程
func (s *JewelryService) RunBusinessFlow() {
	fmt.Println("========== 企业级珠宝加工系统启动 ==========\n")

	// 执行命令
	_ = s.workbench.ExecuteCommand(s.polishCmd)
	_ = s.workbench.ExecuteCommand(s.inlayCmd)
	_ = s.workbench.ExecuteCommand(s.cleanCmd)

	fmt.Println("\n========== 开始撤销操作 ==========")
	_ = s.workbench.UndoLastCommand()
	_ = s.workbench.UndoLastCommand()
	_ = s.workbench.UndoLastCommand()
	_ = s.workbench.UndoLastCommand()
}

调用:

/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Command 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/26 15:09
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : commandbll.go

Command/
├── cmd/                  # 启动入口
│   └── main.go           # 程序主入口
├── internal/             # 内部业务包(对外不可暴露)
│   ├── receiver/         # 接收者:真正执行业务(工匠)
│   │   └── jeweler.go
│   ├── command/          # 命令层:抽象命令 + 具体命令
│   │   ├── command.go    # 命令接口
│   │   ├── polish.go     # 抛光命令
│   │   ├── inlay.go      # 镶嵌命令
│   │   └── clean.go      # 清洗命令
│   ├── invoker/          # 调用者:工作台/命令执行器
│   │   └── workbench.go
│   └── service/          # 业务服务层(可选,复杂业务使用)
│       └── jewelry_service.go
├── go.mod                # Go 模块
└── go.sum
*/
package bll

import (
	"godesginpattern/command/command"
	"godesginpattern/command/invoker"
	"godesginpattern/command/receiver"
	"godesginpattern/command/service"
)

func CommandMain() {
	// 1. 创建接收者(工匠)
	jeweler := receiver.NewJeweler("首席工匠 - 张师傅")

	// 2. 创建命令(依赖注入接收者)
	polishCmd := command.NewPolishRingCommand(jeweler)
	inlayCmd := command.NewInlayDiamondCommand(jeweler)
	cleanCmd := command.NewCleanNecklaceCommand(jeweler)

	// 3. 创建调用者(工作台)
	workbench := invoker.NewWorkbench()

	// 4. 创建业务服务(组装依赖)
	appService := service.NewJewelryService(workbench, polishCmd, inlayCmd, cleanCmd)

	// 5. 执行业务流程
	appService.RunBusinessFlow()
}

输出:

image

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