Files
design-patterns/README.md

6.7 KiB

GoF Design Patterns in Java

Complete runnable Java 25 implementations of all 23 Gang of Four design patterns. Each pattern has a dedicated article at ankurm.com with a UML diagram, step-by-step explanation, and console output.

Structure

design-patterns/
├── 01-creational/
│   ├── factory-method/
│   ├── abstract-factory/
│   ├── builder/
│   ├── prototype/
│   └── singleton/
├── 02-structural/
│   ├── adapter/
│   ├── bridge/
│   ├── composite/
│   ├── decorator/
│   ├── facade/
│   ├── flyweight/
│   └── proxy/
└── 03-behavioral/
    ├── chain-of-responsibility/
    ├── command/
    ├── interpreter/
    ├── iterator/
    ├── mediator/
    ├── memento/
    ├── observer/
    ├── state/
    ├── strategy/
    ├── template-method/
    └── visitor/

Prerequisites

  • Java 25+ (Eclipse Temurin recommended)
  • No build tool required — plain javac / java

Run any pattern

# Linux / macOS / Git Bash (Windows)
javac 03-behavioral/strategy/*.java -d out/strategy
java -cp out/strategy strategy.Main
REM Windows Command Prompt
javac 03-behavioral\strategy\*.java -d out\strategy
java -cp out\strategy strategy.Main

Articles

Pattern Category Article
Factory Method Creational https://ankurm.com/factory-method-design-pattern-java/
Abstract Factory Creational https://ankurm.com/abstract-factory-design-pattern-java/
Builder Creational https://ankurm.com/builder-design-pattern-java/
Prototype Creational https://ankurm.com/prototype-design-pattern-java/
Singleton Creational https://ankurm.com/singleton-design-pattern-java/
Adapter Structural https://ankurm.com/adapter-design-pattern-java/
Bridge Structural https://ankurm.com/bridge-design-pattern-java/
Composite Structural https://ankurm.com/composite-design-pattern-java/
Decorator Structural https://ankurm.com/decorator-design-pattern-java/
Facade Structural https://ankurm.com/facade-design-pattern-java/
Flyweight Structural https://ankurm.com/flyweight-design-pattern-java/
Proxy Structural https://ankurm.com/proxy-design-pattern-java/
Chain of Responsibility Behavioral https://ankurm.com/chain-of-responsibility-design-pattern-java/
Command Behavioral https://ankurm.com/command-design-pattern-java/
Interpreter Behavioral https://ankurm.com/interpreter-design-pattern-java/
Iterator Behavioral https://ankurm.com/iterator-design-pattern-java/
Mediator Behavioral https://ankurm.com/mediator-design-pattern-java/
Memento Behavioral https://ankurm.com/memento-design-pattern-java/
Observer Behavioral https://ankurm.com/observer-design-pattern-java/
State Behavioral https://ankurm.com/state-design-pattern-java/
Strategy Behavioral https://ankurm.com/strategy-design-pattern-java/
Template Method Behavioral https://ankurm.com/template-method-design-pattern-java/
Visitor Behavioral https://ankurm.com/visitor-design-pattern-java/

Post ↔ Code Mapping

Each article is split into multiple runnable parts. This section maps every post section to the exact file(s) in this repository, so you can jump straight from "what I just read" to "the file that implements it." Updated pattern-by-pattern as each article is verified against Java 25.

Factory Method (01-creational/factory-method/)

Post Section File(s)
The Problem: Object Creation Leaks Into Business Logic NotificationService.java (anti-pattern shown for contrast — not called by Main)
Part 1 — The Notification Interface Notification.java
Part 2 — The Concrete Notification Classes EmailNotification.java, SmsNotification.java, PushNotification.java
Part 3 — The NotificationSender Class NotificationSender.java
Part 4 — The Concrete Sender Subclasses EmailSender.java, SmsSender.java, PushSender.java
Part 5 — Running It: Client Code and Output Main.java
Adding a New Channel (Slack) SlackNotification.java, SlackSender.java

Run it:

javac 01-creational/factory-method/*.java -d out/factory-method
java -cp out/factory-method factorymethod.Main

Abstract Factory (01-creational/abstract-factory/)

Post Section File(s)
Part 1 — The Abstract Products: Button and TextField Button.java, TextField.java
Part 2 — The Concrete Products (Light family) LightButton.java, LightTextField.java
Part 2 — The Concrete Products (Dark family) DarkButton.java, DarkTextField.java
Part 3 — The Abstract Factory: UIFactory Interface UIFactory.java
Part 4 — The Concrete Factories LightThemeFactory.java, DarkThemeFactory.java
Part 5 — The Client: Application Application.java, Main.java

Run it:

javac 01-creational/abstract-factory/*.java -d out/abstract-factory
java -cp out/abstract-factory abstractfactory.Main
# or, for the dark theme family:
java -Dapp.theme=dark -cp out/abstract-factory abstractfactory.Main

Builder (01-creational/builder/)

Post Section File(s)
Part 1 — The Product: HttpRequest (Immutable) HttpRequest.java
Part 2 — The Director: Encapsulating Common Configurations HttpClientConfig.java
Part 3 — Using the Builder: Client Code Main.java

Note: the Lombok @Builder example and the JDK standard-library snippets (HttpRequest.newBuilder(), StringBuilder, ProcessBuilder) are illustrative only — they are not part of this repository's runnable example.

Run it:

javac 01-creational/builder/*.java -d out/builder
java -cp out/builder builder.Main

Prototype (01-creational/prototype/)

Post Section File(s)
Part 1 — The Prototype Interface: Copyable Copyable.java
Part 2 — The Nested Object: DocumentMetadata DocumentMetadata.java
Part 3 — The Concrete Prototype: Document Document.java
Part 4 — The Prototype Registry: DocumentRegistry DocumentRegistry.java
Part 5 — Using the Prototype: Client Code Main.java

Note: the ShallowVsDeepDemo snippet (shallow vs. deep copy) and the Cloneable-based example are illustrative only — they are not part of this repository's runnable example.

Run it:

javac 01-creational/prototype/*.java -d out/prototype
java -cp out/prototype prototype.Main

Reference