Skip to content

shift-elevate/design-patterns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Design Patterns in Java πŸŽ“

An educational Maven project demonstrating various design patterns in Java with practical, real-world examples.

πŸ“‹ Table of Contents

🎯 Project Overview

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

πŸ”§ Prerequisites

  • Java 21 (OpenJDK 21.0.7+)
  • Maven 3.9+
  • IDE (IntelliJ IDEA, Eclipse, or VS Code recommended)

Installing Java 21

# 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 --version

πŸ“ Project Structure

design-patterns/
└── src/main/java/com/designpatterns/
    β”œβ”€β”€ creational/
    β”‚   β”œβ”€β”€ factorymethod/
    β”‚   β”œβ”€β”€ abstractfactory/
    β”‚   β”œβ”€β”€ builder/
    β”‚   β”œβ”€β”€ prototype/
    β”‚   └── singleton/
    β”œβ”€β”€ structural/
    β”‚   β”œβ”€β”€ adapter/
    β”‚   β”œβ”€β”€ bridge/
    β”‚   β”œβ”€β”€ composite/
    β”‚   β”œβ”€β”€ decorator/
    β”‚   β”œβ”€β”€ facade/
    β”‚   β”œβ”€β”€ flyweight/
    β”‚   └── proxy/
    └── behavioural/
        β”œβ”€β”€ observer/
        β”œβ”€β”€ command/
        β”œβ”€β”€ iterator/
        β”œβ”€β”€ state/
        β”œβ”€β”€ mediator/
        β”œβ”€β”€ strategy/
        β”œβ”€β”€ chainofresponsibility/
        β”œβ”€β”€ memento/
        └── visitor/

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

πŸš€ Quick Start

1. Clone the Repository

git clone https://github.com/shift-elevate/design-patterns.git
cd design-patterns

2. Setup Environment (Automatic with SDKMAN)

The 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.10

3. Build the Project

mvn clean compile

4. Run the Main Application

mvn exec:java -Dexec.mainClass="com.designpatterns.Main"

This will launch the main demonstration showing all implemented design patterns.

πŸ“š Running Instructions

🎯 Recommended: Run Main Application for Complete Demo

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.Main

πŸ“¦ Advanced: Build and Run JAR

For standalone execution:

# Build executable JAR
mvn clean package

# Run the JAR
java -jar target/design-patterns-1.0.0.jar

πŸ’» IDE Integration

  1. Import Project: Import as Maven project in your IDE
  2. Set Java Version: Ensure Java 21 is configured
  3. Run Main Class: Execute com.designpatterns.Main
  4. Run Tests: Execute individual test classes for detailed pattern demonstrations

πŸ§ͺ Testing

Run All Tests

mvn test

Run Specific Test Class

πŸ—οΈ Creational Patterns

# 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

# Singleton Pattern
mvn test -Dtest=SingletonPatternTest

πŸ›οΈ Structural Patterns

# 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

# Proxy Pattern
mvn test -Dtest=ProxyPatternTest

🎭 Behavioural Patterns

# Observer Pattern
mvn test -Dtest=ObserverPatternTest

# Command Pattern
mvn test -Dtest=CommandPatternTest

# Iterator Pattern
mvn test -Dtest=IteratorPatternTest

# State Pattern
mvn test -Dtest=StatePatternTest

# Mediator Pattern
mvn test -Dtest=MediatorPatternTest

# Strategy Pattern
mvn test -Dtest=StrategyPatternTest

# Chain of Responsibility Pattern
mvn test -Dtest=ChainOfResponsibilityPatternTest

# Memento Pattern
mvn test -Dtest=MementoPatternTest

# Visitor Pattern
mvn test -Dtest=VisitorPatternTest

πŸš€ Running Launcher Classes

Run Specific Launcher Class

πŸ—οΈ Creational Patterns

# 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"

# Singleton Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.creational.singleton.SingletonLauncher"

πŸ›οΈ Structural Patterns

# 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"

# Proxy Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.structural.proxy.ProxyLauncher"

🎭 Behavioural Patterns

# 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"

# Mediator Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.behavioural.mediator.MediatorLauncher"

# Strategy Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.behavioural.strategy.NavigationLauncher"

# Chain of Responsibility Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.behavioural.chainofresponsibility.ExpenseApprovalLauncher"

# Memento Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.behavioural.memento.DiagramEditorLauncher"

# Visitor Pattern
mvn exec:java -Dexec.mainClass="com.designpatterns.behavioural.visitor.ClinicBillingLauncher"

πŸ› Troubleshooting

Common Issues

Java Version Issues:

# Check Java version
java --version

# Ensure Java 21 is active
sdk current java

Maven Compilation Issues:

# Clean and rebuild
mvn clean compile

# Skip tests if needed
mvn compile -DskipTests

Class Path Issues:

# Ensure proper classpath when running
java -cp target/classes com.designpatterns.Main

πŸ“„ License

This 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.