# romise15/software-design-patterns architecture

> Architecture diagram of the GitHub repository romise15/software-design-patterns, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/romise15/software-design-patterns
- Repository: https://github.com/romise15/software-design-patterns

## Overview

This repository is a set of Java examples demonstrating design patterns, rather than one integrated application. Each assignment has its own small user-to-result flow: construct and display reports, create transports or platform-specific UI, draw shapes with interchangeable renderers, convert a video, select a route strategy, or visit a file-system tree. The graph preserves these separate workflows and their internal pattern roles. Relationships for unsampled classes are included only where the source index or shown code supports them; there is no README capability description.

Main entry points: [`assignment4/src/assignment4/VideoConversionFacade.java`](https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/VideoConversionFacade.java) (Conversion Facade), [`assignment2/src/assignment2/Main.java`](https://github.com/romise15/software-design-patterns/blob/main/assignment2/src/assignment2/Main.java) (Factory Demo), [`assignment6/src/assignment6/Main.java`](https://github.com/romise15/software-design-patterns/blob/main/assignment6/src/assignment6/Main.java) (Visitor Demo), [`assignment1-builder/src/Main.java`](https://github.com/romise15/software-design-patterns/blob/main/assignment1-builder/src/Main.java) (Report Demo)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_report["Report Builder"]
  node_report_main["Report Demo<br/>[Main.java]"]
  node_director["Report Director"]
  node_builders["Format Builders"]
  node_report_model["Report<br/>[Report.java]"]
end

subgraph group_factories["Factory Patterns"]
  node_factory_main["Factory Demo<br/>[Main.java]"]
  node_transport_factory["Transport Factories"]
  node_transport_model["Transport Products"]
  node_gui_app["GUI Application<br/>[Application.java]"]
  node_gui_factories["Platform Factories"]
  node_gui_widgets["Platform Widgets"]
end

subgraph group_bridge["Shape Rendering"]
  node_shape_main["Drawing Demo<br/>[Main.java]"]
  node_shapes["Shapes<br/>[Shape.java]"]
  node_renderers["Renderers<br/>[Renderer.java]"]
end

subgraph group_conversion["Video Conversion"]
  node_video_main["Conversion Demo<br/>[Main.java]"]
  node_video_facade["Conversion Facade"]
  node_video_file["Video File<br/>[VideoFile.java]"]
  node_codec["Codec Detection<br/>[CodecFactory.java]"]
  node_bitrate["Bitrate Reader<br/>[BitrateReader.java]"]
  node_audio["Audio Mixer<br/>[AudioMixer.java]"]
end

subgraph group_routing["Route Strategies"]
  node_route_main["Navigation Demo<br/>[Main.java]"]
  node_navigator["Navigator<br/>[Navigator.java]"]
  node_strategies["Route Strategies<br/>[RouteStrategy.java]"]
end

subgraph group_visitor["File-System Visitor"]
  node_visitor_main["Visitor Demo<br/>[Main.java]"]
  node_tree["File-System Elements"]
  node_search["Search Visitor<br/>[SearchVisitor.java]"]
  node_size["Size Calculator"]
end

node_report_user(("Example Runner"))
node_factory_user(("Example Runner"))
node_shape_user(("Example Runner"))
node_video_user(("Example Runner"))
node_route_user(("Example Runner"))
node_visitor_user(("Example Runner"))

node_report_user -->|"runs"| node_report_main
node_report_main -->|"requests reports"| node_director
node_director -->|"uses builder"| node_builders
node_builders -->|"builds"| node_report_model
node_report_main -->|"displays"| node_report_model
node_factory_user -->|"runs"| node_factory_main
node_factory_main -->|"plans delivery"| node_transport_factory
node_transport_factory -->|"creates"| node_transport_model
node_factory_main -->|"creates"| node_gui_app
node_factory_main -->|"selects"| node_gui_factories
node_gui_app -->|"requests widgets"| node_gui_factories
node_gui_app -->|"renders and triggers"| node_gui_widgets
node_gui_factories -->|"creates"| node_gui_widgets
node_shape_user -->|"runs"| node_shape_main
node_shape_main -->|"draws"| node_shapes
node_shapes -->|"delegates drawing"| node_renderers
node_video_user -->|"runs"| node_video_main
node_video_main -->|"requests conversion"| node_video_facade
node_video_facade -->|"creates"| node_video_file
node_video_facade -->|"detects codec"| node_codec
node_video_facade -->|"reads and converts"| node_bitrate
node_video_facade -->|"fixes audio"| node_audio
node_bitrate -->|"reads"| node_video_file
node_route_user -->|"runs"| node_route_main
node_route_main -->|"configures"| node_navigator
node_navigator -->|"uses strategy"| node_strategies
node_visitor_user -->|"runs"| node_visitor_main
node_visitor_main -->|"builds tree"| node_tree
node_visitor_main -->|"runs search"| node_search
node_visitor_main -->|"calculates size"| node_size
node_tree -->|"accepts visits"| node_search
node_tree -->|"accepts visits"| node_size

click node_report_main "https://github.com/romise15/software-design-patterns/blob/main/assignment1-builder/src/Main.java"
click node_director "https://github.com/romise15/software-design-patterns/blob/main/assignment1-builder/src/director/ReportDirector.java"
click node_builders "https://github.com/romise15/software-design-patterns/tree/main/assignment1-builder/src/builder"
click node_report_model "https://github.com/romise15/software-design-patterns/blob/main/assignment1-builder/src/model/Report.java"
click node_factory_main "https://github.com/romise15/software-design-patterns/blob/main/assignment2/src/assignment2/Main.java"
click node_transport_factory "https://github.com/romise15/software-design-patterns/tree/main/assignment2/src/assignment2/factory_method/factory"
click node_transport_model "https://github.com/romise15/software-design-patterns/tree/main/assignment2/src/assignment2/factory_method/model"
click node_gui_app "https://github.com/romise15/software-design-patterns/blob/main/assignment2/src/assignment2/abstract_factory/app/Application.java"
click node_gui_factories "https://github.com/romise15/software-design-patterns/tree/main/assignment2/src/assignment2/abstract_factory/factory"
click node_gui_widgets "https://github.com/romise15/software-design-patterns/tree/main/assignment2/src/assignment2/abstract_factory/button"
click node_shape_main "https://github.com/romise15/software-design-patterns/blob/main/assignment3/src/assignment3/Main.java"
click node_shapes "https://github.com/romise15/software-design-patterns/blob/main/assignment3/src/assignment3/Shape.java"
click node_renderers "https://github.com/romise15/software-design-patterns/blob/main/assignment3/src/assignment3/Renderer.java"
click node_video_main "https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/Main.java"
click node_video_facade "https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/VideoConversionFacade.java"
click node_video_file "https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/VideoFile.java"
click node_codec "https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/CodecFactory.java"
click node_bitrate "https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/BitrateReader.java"
click node_audio "https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/AudioMixer.java"
click node_route_main "https://github.com/romise15/software-design-patterns/blob/main/assignment5/src/assignment5/Main.java"
click node_navigator "https://github.com/romise15/software-design-patterns/blob/main/assignment5/src/assignment5/Navigator.java"
click node_strategies "https://github.com/romise15/software-design-patterns/blob/main/assignment5/src/assignment5/RouteStrategy.java"
click node_visitor_main "https://github.com/romise15/software-design-patterns/blob/main/assignment6/src/assignment6/Main.java"
click node_tree "https://github.com/romise15/software-design-patterns/blob/main/assignment6/src/assignment6/FileSystemElement.java"
click node_search "https://github.com/romise15/software-design-patterns/blob/main/assignment6/src/assignment6/SearchVisitor.java"
click node_size "https://github.com/romise15/software-design-patterns/blob/main/assignment6/src/assignment6/SizeCalculatorVisitor.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_report_main,node_director,node_builders,node_report_model toneBlue
class node_factory_main,node_transport_factory,node_transport_model,node_gui_app,node_gui_factories,node_gui_widgets toneAmber
class node_shape_main,node_shapes,node_renderers toneMint
class node_video_main,node_video_facade,node_video_file,node_codec,node_bitrate,node_audio toneRose
class node_route_main,node_navigator,node_strategies,node_report_user,node_factory_user,node_shape_user,node_video_user,node_route_user,node_visitor_user toneIndigo
class node_visitor_main,node_tree,node_search,node_size toneTeal
```

## Components

### Report Builder

- [Report Demo](https://github.com/romise15/software-design-patterns/blob/main/assignment1-builder/src/Main.java): `assignment1-builder/src/Main.java`
- [Report Director](https://github.com/romise15/software-design-patterns/blob/main/assignment1-builder/src/director/ReportDirector.java): `assignment1-builder/src/director/ReportDirector.java`
- [Format Builders](https://github.com/romise15/software-design-patterns/tree/main/assignment1-builder/src/builder): `assignment1-builder/src/builder`
- [Report](https://github.com/romise15/software-design-patterns/blob/main/assignment1-builder/src/model/Report.java): `assignment1-builder/src/model/Report.java`

### Factory Patterns

- [Factory Demo](https://github.com/romise15/software-design-patterns/blob/main/assignment2/src/assignment2/Main.java): `assignment2/src/assignment2/Main.java`
- [Transport Factories](https://github.com/romise15/software-design-patterns/tree/main/assignment2/src/assignment2/factory_method/factory): `assignment2/src/assignment2/factory_method/factory`
- [Transport Products](https://github.com/romise15/software-design-patterns/tree/main/assignment2/src/assignment2/factory_method/model): `assignment2/src/assignment2/factory_method/model`
- [GUI Application](https://github.com/romise15/software-design-patterns/blob/main/assignment2/src/assignment2/abstract_factory/app/Application.java): `assignment2/src/assignment2/abstract_factory/app/Application.java`
- [Platform Factories](https://github.com/romise15/software-design-patterns/tree/main/assignment2/src/assignment2/abstract_factory/factory): `assignment2/src/assignment2/abstract_factory/factory`
- [Platform Widgets](https://github.com/romise15/software-design-patterns/tree/main/assignment2/src/assignment2/abstract_factory/button): `assignment2/src/assignment2/abstract_factory/button`

### Shape Rendering

- [Drawing Demo](https://github.com/romise15/software-design-patterns/blob/main/assignment3/src/assignment3/Main.java): `assignment3/src/assignment3/Main.java`
- [Shapes](https://github.com/romise15/software-design-patterns/blob/main/assignment3/src/assignment3/Shape.java): `assignment3/src/assignment3/Shape.java`
- [Renderers](https://github.com/romise15/software-design-patterns/blob/main/assignment3/src/assignment3/Renderer.java): `assignment3/src/assignment3/Renderer.java`

### Video Conversion

- [Conversion Demo](https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/Main.java): `assignment4/src/assignment4/Main.java`
- [Conversion Facade](https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/VideoConversionFacade.java): `assignment4/src/assignment4/VideoConversionFacade.java`
- [Video File](https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/VideoFile.java): `assignment4/src/assignment4/VideoFile.java`
- [Codec Detection](https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/CodecFactory.java): `assignment4/src/assignment4/CodecFactory.java`
- [Bitrate Reader](https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/BitrateReader.java): `assignment4/src/assignment4/BitrateReader.java`
- [Audio Mixer](https://github.com/romise15/software-design-patterns/blob/main/assignment4/src/assignment4/AudioMixer.java): `assignment4/src/assignment4/AudioMixer.java`

### Route Strategies

- [Navigation Demo](https://github.com/romise15/software-design-patterns/blob/main/assignment5/src/assignment5/Main.java): `assignment5/src/assignment5/Main.java`
- [Navigator](https://github.com/romise15/software-design-patterns/blob/main/assignment5/src/assignment5/Navigator.java): `assignment5/src/assignment5/Navigator.java`
- [Route Strategies](https://github.com/romise15/software-design-patterns/blob/main/assignment5/src/assignment5/RouteStrategy.java): `assignment5/src/assignment5/RouteStrategy.java`

### File-System Visitor

- [Visitor Demo](https://github.com/romise15/software-design-patterns/blob/main/assignment6/src/assignment6/Main.java): `assignment6/src/assignment6/Main.java`
- [File-System Elements](https://github.com/romise15/software-design-patterns/blob/main/assignment6/src/assignment6/FileSystemElement.java): `assignment6/src/assignment6/FileSystemElement.java`
- [Search Visitor](https://github.com/romise15/software-design-patterns/blob/main/assignment6/src/assignment6/SearchVisitor.java): `assignment6/src/assignment6/SearchVisitor.java`
- [Size Calculator](https://github.com/romise15/software-design-patterns/blob/main/assignment6/src/assignment6/SizeCalculatorVisitor.java): `assignment6/src/assignment6/SizeCalculatorVisitor.java`

### Other components

- **Example Runner**
- **Example Runner**
- **Example Runner**
- **Example Runner**
- **Example Runner**
- **Example Runner**

## Connections

- Example Runner → Report Demo: runs (evidence: `assignment1-builder/src/Main.java`)
- Report Demo → Report Director: requests reports (evidence: `assignment1-builder/src/Main.java`)
- Report Director → Format Builders: uses builder (evidence: `assignment1-builder/src/director/ReportDirector.java`)
- Format Builders → Report: builds (evidence: `assignment1-builder/src/builder/ReportBuilder.java`)
- Report Demo → Report: displays (evidence: `assignment1-builder/src/Main.java`)
- Example Runner → Factory Demo: runs (evidence: `assignment2/src/assignment2/Main.java`)
- Factory Demo → Transport Factories: plans delivery (evidence: `assignment2/src/assignment2/Main.java`)
- Transport Factories → Transport Products: creates (evidence: `assignment2/src/assignment2/factory_method/factory/TransportFactory.java`)
- Factory Demo → GUI Application: creates (evidence: `assignment2/src/assignment2/Main.java`)
- Factory Demo → Platform Factories: selects (evidence: `assignment2/src/assignment2/Main.java`)
- GUI Application → Platform Factories: requests widgets (evidence: `assignment2/src/assignment2/abstract_factory/app/Application.java`)
- GUI Application → Platform Widgets: renders and triggers (evidence: `assignment2/src/assignment2/abstract_factory/app/Application.java`)
- Platform Factories → Platform Widgets: creates (evidence: `assignment2/src/assignment2/abstract_factory/factory/WindowsFactory.java`)
- Example Runner → Drawing Demo: runs (evidence: `assignment3/src/assignment3/Main.java`)
- Drawing Demo → Shapes: draws (evidence: `assignment3/src/assignment3/Main.java`)
- Shapes → Renderers: delegates drawing (evidence: `assignment3/src/assignment3/Circle.java`)
- Example Runner → Conversion Demo: runs (evidence: `assignment4/src/assignment4/Main.java`)
- Conversion Demo → Conversion Facade: requests conversion (evidence: `assignment4/src/assignment4/Main.java`)
- Conversion Facade → Video File: creates (evidence: `assignment4/src/assignment4/VideoConversionFacade.java`)
- Conversion Facade → Codec Detection: detects codec (evidence: `assignment4/src/assignment4/VideoConversionFacade.java`)
- Conversion Facade → Bitrate Reader: reads and converts (evidence: `assignment4/src/assignment4/VideoConversionFacade.java`)
- Conversion Facade → Audio Mixer: fixes audio (evidence: `assignment4/src/assignment4/VideoConversionFacade.java`)
- Bitrate Reader → Video File: reads (evidence: `assignment4/src/assignment4/BitrateReader.java`)
- Example Runner → Navigation Demo: runs (evidence: `assignment5/src/assignment5/Main.java`)
- Navigation Demo → Navigator: configures (evidence: `assignment5/src/assignment5/Main.java`)
- Navigator → Route Strategies: uses strategy (evidence: `assignment5/src/assignment5/Navigator.java`)
- Example Runner → Visitor Demo: runs (evidence: `assignment6/src/assignment6/Main.java`)
- Visitor Demo → File-System Elements: builds tree (evidence: `assignment6/src/assignment6/Main.java`)
- Visitor Demo → Search Visitor: runs search (evidence: `assignment6/src/assignment6/Main.java`)
- Visitor Demo → Size Calculator: calculates size (evidence: `assignment6/src/assignment6/Main.java`)
- File-System Elements → Search Visitor: accepts visits
- File-System Elements → Size Calculator: accepts visits
