explaingit

jakubvojvoda/design-patterns-cpp

4,536C++Audience · developerComplexity · 2/5Setup · easy

TLDR

C++ source code implementations of all 23 classic Gang of Four design patterns, organized into creational, structural, and behavioral groups, for learning object-oriented design or quick interview reference.

Mindmap

mindmap
  root((design-patterns-cpp))
    Creational Patterns
      Factory Method
      Singleton
      Builder
    Structural Patterns
      Decorator
      Adapter
      Proxy
    Behavioral Patterns
      Observer
      Strategy
      Command
    Purpose
      GoF reference
      Learning resource
      Interview prep
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Study how the Observer or Strategy pattern is implemented in C++ before adding event handling or behavior switching to your own classes

USE CASE 2

Use the Singleton or Factory Method implementation as a starting template for your C++ project

USE CASE 3

Prepare for software engineering interviews by compiling and running all 23 pattern examples

USE CASE 4

Compare the same Gang of Four pattern side-by-side in C++, Java, and Python using the author's sibling repositories

Tech stack

C++

Getting it running

Difficulty · easy Time to first run · 5min

In plain English

Design patterns are named, reusable solutions to problems that come up repeatedly when writing object-oriented software. Rather than being code you copy directly, they are templates or blueprints that describe how to structure your classes and objects to handle a particular kind of problem. This repository provides C++ source code implementations of 23 classic patterns drawn from the well-known "Gang of Four" book and the Head First: Design Patterns book. The patterns are organized into three groups. Creational patterns deal with how objects are created: the Abstract Factory, Builder, Factory Method, Prototype, and Singleton patterns fall here. Structural patterns describe how classes and objects are combined into larger structures: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, and Proxy. Behavioral patterns cover how objects communicate and share responsibility: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, and Visitor. Each pattern has its own folder in the repository, containing a C++ implementation you can read, compile, and experiment with. The README itself is brief: it names each pattern with a short phrase describing what aspect of design it addresses, and links to the corresponding folder. There is no extended explanation of how each pattern works or when to use it beyond those short descriptions. The author also maintains companion repositories with the same patterns implemented in Java and Python. If you are learning design patterns or want to see how a specific pattern looks in C++ code alongside the theory from those reference books, this collection serves as a concise reference.

Copy-paste prompts

Prompt 1
I'm implementing the Strategy pattern in C++ for a game with multiple movement behaviors. Show me the design-patterns-cpp Strategy example and explain when to prefer it over a big if-else block.
Prompt 2
Walk me through the Observer pattern C++ implementation from jakubvojvoda/design-patterns-cpp and show me how to add a new ConcreteObserver that logs state changes to a file.
Prompt 3
I need a thread-safe Singleton in modern C++. How does the design-patterns-cpp Singleton example work, and what change makes it safe when multiple threads initialize it simultaneously?
Prompt 4
Explain the difference between the Decorator and Proxy structural patterns using the C++ source code examples from design-patterns-cpp.
Prompt 5
Show me how to compile and run the Composite pattern example from design-patterns-cpp using g++ on the command line, including any flags needed for C++11 or later.
Open on GitHub → Explain another repo

← jakubvojvoda on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.