Skip to content

ccc592/design_pattern

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

设计模式学习(C++ / Go)

本仓库用于系统性学习与对照实现设计模式:同一模式分别用 C++ 与 Go 实现,配合原理说明、对比与小练习。

学习路线

  • 目标:理解每个模式的动机、结构、适用场景;能在 C++ 与 Go 中各写出一个最小可运行示例,并能进行语言差异对比。
  • 顺序(建议 3–4 周):
    1. 创建型:Singleton, Factory Method, Abstract Factory, Builder, Prototype
    2. 结构型:Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
    3. 行为型:Strategy, Template Method, Observer, Command, Iterator, State, Visitor, Chain of Responsibility, Mediator, Memento, Interpreter
    4. 选修与并发:Go 的 Pipeline/Worker Pool/Context 取消;C++ 的线程池、future/promise 等
  • 每个模式统一模板:
    • README:动机、UML/结构、实现要点(C++ / Go 差异)、适用与不适用场景、复杂度与陷阱
    • 代码:一份 C++ 示例与一份 Go 示例,均可直接运行

目录结构

cpp/
  README.md
  patterns/
    creational/
      singleton/
        singleton.cpp
        README.md
    behavioral/
      strategy/
        strategy.cpp
        README.md
go/
  README.md
  patterns/
    creational/
      singleton/
        main.go
        README.md
    behavioral/
      strategy/
        main.go
        README.md

使用方式

  • 学习顺序:先读模式 README,再跑 C++,再跑 Go,最后做对照与总结。
  • 提交建议:每完成一个模式,补充对应 README 的“对照总结”一节,记录踩坑点与语言差异。

命令速查与新增模式模板见:docs/COMMANDS.md 模式 README 模板:docs/PATTERN_TEMPLATE.md

构建与运行(速查)

  • C++(使用 CMake + clang):
    • 配置:cmake -S . -B build -DCMAKE_CXX_COMPILER=clang++
    • 构建:cmake --build build -j
    • 运行:./build/cpp/dp_singleton./build/cpp/dp_strategy
  • Go(需要 Go 1.20+):
    • Singleton:go run go/patterns/creational/singleton/main.go
    • Strategy:go run go/patterns/behavioral/strategy/main.go

学习建议

  • 先“为什么”(痛点/动机)→ 再“怎么做”(结构/角色)→ 最后“何时用/不用”。
  • 对照要点:
    • C++:对象生命周期、所有权、RAII、继承/多态与模板、线程安全(local static、std::call_once)
    • Go:接口组合、函数式策略、并发原语(goroutine、channel、sync.Once、context)
  • 每个模式尝试回答:
    • 我在项目里何时会用它?替代方案是?隐藏代价是什么?

开箱已提供 Singleton 与 Strategy 双语示例,后续可按模板扩展其它模式。

About

C++ 和 GO 设计模式学习实践

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors