An educational Maven project demonstrating various design patterns in Java with practical, real-world examples.
- Project Overview
- Prerequisites
- Project Structure
- Quick Start
- Running Instructions
- Testing
- Contributing
This project serves as an educational resource for learning design patterns through hands-on implementation. Each pattern is demonstrated with:
- ✅ Clear, practical examples
- ✅ Comprehensive documentation
- ✅ Interactive console demonstrations
- ✅ Unit tests
- ✅ Real-world use cases
- Java 21 (OpenJDK 21.0.7+)
- Maven 3.9+
- IDE (IntelliJ IDEA, Eclipse, or VS Code recommended)
# Using SDKMAN (recommended)
sdk install java 21.0.7-tem
# For this project only (recommended approach)
# The project includes .sdkmanrc file for automatic environment switching
sdk env
# Or manually switch for this session only
sdk use java 21.0.7-tem
# Verify installation
java --versiondesign-patterns/
└── src/main/java/com/designpatterns/
├── creational/
│ ├── factorymethod/
│ ├── abstractfactory/
│ ├── builder/
│ └── prototype/
├── structural/
│ ├── adapter/
│ ├── bridge/
│ ├── composite/
│ ├── decorator/
│ ├── facade/
│ └── flyweight/
└── behavioural/
├── observer/
├── command/
├── iterator/
└── state/
Pattern Organization:
- Each design pattern has its own dedicated package
- Clean separation between domain objects and creation logic
- Extensible structure for adding new patterns
- Comprehensive test coverage for each pattern
git clone https://github.com/shift-elevate/design-patterns.git
cd design-patternsThe project includes a .sdkmanrc file that automatically configures Java 21 and Maven when you enter the directory:
# Activate the project environment (Java 21 + Maven)
sdk env
# This will automatically switch to:
# - Java 21.0.7-tem
# - Maven 3.9.10mvn clean compilemvn exec:java -Dexec.mainClass="com.designpatterns.Main"This will launch the main demonstration showing all implemented design patterns.
The best way to see all design patterns in action:
# Run the main application with all pattern demonstrations
mvn exec:java -Dexec.mainClass="com.designpatterns.Main"
# Or compile and run directly
mvn clean compile
java -cp target/classes com.designpatterns.MainFor standalone execution:
# Build executable JAR
mvn clean package
# Run the JAR
java -jar target/design-patterns-1.0.0.jar- Import Project: Import as Maven project in your IDE
- Set Java Version: Ensure Java 21 is configured
- Run Main Class: Execute
com.designpatterns.Main - Run Tests: Execute individual test classes for detailed pattern demonstrations
mvn test# Factory Method Pattern
mvn test -Dtest=FactoryMethodTest
# Abstract Factory Pattern
mvn test -Dtest=AbstractFactoryTest
# Builder Pattern
mvn test -Dtest=BuilderPatternTest
# Prototype Pattern
mvn test -Dtest=PrototypePatternTest# Adapter Pattern
mvn test -Dtest=AdapterPatternTest
# Bridge Pattern
mvn test -Dtest=BridgePatternTest
# Composite Pattern
mvn test -Dtest=CompositePatternTest
# Decorator Pattern
mvn test -Dtest=DecoratorPatternTest
# Facade Pattern
mvn test -Dtest=FacadePatternTest
# Flyweight Pattern
mvn test -Dtest=FlyweightPatternTest# Observer Pattern
mvn test -Dtest=ObserverPatternTest
# Command Pattern
mvn test -Dtest=CommandPatternTest
# Iterator Pattern
mvn test -Dtest=IteratorPatternTest
# State Pattern
mvn test -Dtest=StatePatternTest# Factory Method Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.creational.factorymethod.GameLauncher"
# Abstract Factory Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.creational.abstractfactory.GameLauncher"
# Builder Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.creational.builder.ECommerceLauncher"
# Prototype Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.creational.prototype.PrototypeLauncher"# Adapter Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.structural.adapter.ECommerceLauncher"
# Bridge Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.structural.bridge.BridgeLauncher"
# Composite Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.structural.composite.CompositeLauncher"
# Decorator Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.structural.decorator.CoffeeShopLauncher"
# Facade Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.structural.facade.CodeEditorClient"
# Flyweight Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.structural.flyweight.FlyweightLauncher"# Observer Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.behavioural.observer.ObserverLauncher"
# Command Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.behavioural.command.SmartHomeLauncher"
# Iterator Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.behavioural.iterator.MusicPlayerLauncher"
# State Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.behavioural.state.DocumentWorkflowLauncher"Java Version Issues:
# Check Java version
java --version
# Ensure Java 21 is active
sdk current javaMaven Compilation Issues:
# Clean and rebuild
mvn clean compile
# Skip tests if needed
mvn compile -DskipTestsClass Path Issues:
# Ensure proper classpath when running
java -cp target/classes com.designpatterns.MainThis project is created for educational purposes. Feel free to use and modify for learning.
Happy Learning! 🚀
Remember: Understanding design patterns is about recognizing when and how to apply them, not just memorizing their structure.